面向对象——类与对象

文章目录

    • 类与对象
    • 构造函数、析构函数
    • get/set方法
    • 函数:类内声明、类外定义
    • static

类与对象

#include<iostream>
#include<string>
using namespace std;
/*
类与对象 
*/
class Person{public:string name;// 固有属性,成员变量 int age;public:void eat(){ // 成员函数,成员方法 cout<<"eat()"<<endl;}void show(){cout<<"[name:"<<name<<", age:"<<age<<"]"<<endl;} 
};
int main(){Person p1;  // 实例化对象 p1.name = "AAA";p1.age = 11;p1.eat();p1.show();return 0;
} 

构造函数、析构函数

#include<iostream>
#include<string>
using namespace std;/*
构造函数类成员属性 
public属性的成员对外可见,对内可见。
private属性的成员对外不可见,对内可见。
protected属性的成员对外不可见,对内可见,且对派生类是可见的。
*/class Person{public: // 公开,哪里都可以访问 string name;// 固有属性,成员变量 int age;public: // 公开,哪里都可以访问 Person(){// 无参构造 cout<<"构造函数:Person()"<<endl;} Person(string _name,int _age){// 有参构造函数  name = _name;age = _age;cout<<"构造函数:Person(string _name,int _age)"<<endl;}Person(const Person& p){ // 复制构造函数 name = p.name;age = p.age;cout<<"构造函数:Person(const Person& p)"<<endl;}~Person(){ // 析构函数// 析构函数:无法重载,析构顺序与构造顺序相反 cout<<"~Person()"<<name<<endl; }void show(){ // 成员函数,成员方法 cout<<"[name:"<<name<<", age:"<<age<<"]"<<endl;}
};
int main(){Person p1;  // 实例化对象,调用无参构造函数 p1.name = "AAA"; // errorp1.age = 11;p1.show();Person p2("BBB", 12);// 实例化对象,调用有参构造函数 p2.show();Person p3(p1);p3.show(); return 0;
} 

get/set方法

#include<iostream>
#include<string>
using namespace std;/*
get/set方法 
*/
class Person{private: // 私有,仅类内可以访问 string name;// 固有属性,成员变量 int age;public: // 公开,哪里都可以访问 Person(){// 无参构造 cout<<"构造函数:Person()"<<endl;} Person(string _name,int _age){// 有参构造函数  name = _name;age = _age;cout<<"构造函数:Person(string _name,int _age)"<<endl;}Person(const Person& p){ // 复制构造函数 name = p.name;age = p.age;cout<<"构造函数:Person(const Person& p)"<<endl;}~Person(){ // 析构函数// 析构函数:无法重载,析构顺序与构造顺序相反 cout<<"~Person()"<<name<<endl; }// 提供get/set方法 void setName(string _name){ name = _name; } string getName(){ return name; }void setAge(int _age){ age = _age; }int getAge(){ return age; }void show(){ // 成员函数,成员方法 cout<<"[name:"<<name<<", age:"<<age<<"]"<<endl;}
};
int main(){Person p1;  // 实例化对象,调用无参构造函数 
//	p1.name = "AAA"; // error
//	p1.age = 11;p1.setName("AAA");p1.setAge(11);p1.show();Person p2("BBB", 12);// 实例化对象,调用有参构造函数 p2.show();Person p3(p1);p3.setName("CCC");p3.show(); return 0;
} 

函数:类内声明、类外定义

#include<iostream>
#include<string>
using namespace std;/*
函数:类内声明、类外定义 
*/class Person{private: // 私有,仅类内可以访问 string name;// 固有属性,成员变量 int age;public: // 公开,哪里都可以访问 Person(); // 无参构造函数的声明 Person(string _name,int _age);// 有参构造函数的声明  Person(const Person& p); // 复制构造函数的声明 ~Person(); // 析构函数的声明 // 提供get/set方法 void setName(string _name){ name = _name; } string getName(){ return name; }void setAge(int _age){ age = _age; }int getAge(){ return age; }void show(){ // 成员函数,成员方法 cout<<"[name:"<<name<<", age:"<<age<<"]"<<endl;}
};// 构造函数的类外实现 
Person::Person(){// 无参构造 cout<<"构造函数:Person()"<<endl;
} 
Person::Person(string _name,int _age){// 有参构造函数  name = _name;age = _age;cout<<"构造函数:Person(string _name,int _age)"<<endl;
}
Person::Person(const Person& p){ // 复制构造函数 name = p.name;age = p.age;cout<<"构造函数:Person(const Person& p)"<<endl;
}
Person::~Person(){ // 析构函数
// 析构函数:无法重载,析构顺序与构造顺序相反 cout<<"析构函数:~Person()"<<name<<endl; 
}int main(){Person p1; 
//	p1.name = "AAA"; // error
//	p1.age = 11;p1.setName("AAA");p1.setAge(11);p1.show();Person p2("BBB", 12);// 实例化对象,调用有参构造函数 p2.show();Person p3(p1);p3.setName("CCC");p3.show(); return 0;
} 

static

#include<iostream>
#include<string>
using namespace std;/*
内联成员函数,使用inline关键字将函数定义为内联函数。
对于成员函数来说,如果其定义是在类体中,即使没有使用inline关键字,该成员函数也被认为是内联成员函数。static 关键字: 静态成员属于类 
对于静态成员来说,不仅可以通过对象访问,还可以直接使用类名访问:
----------------临时分割线 
静态数据成员可以是当前类的类型,而其他数据成员只能是当前类的指针或引用类型
类的静态成员函数只能访问类的静态数据成员,而不能访问普通的数据成员。
静态成员函数不能定义为const成员函数,即静态成员函数末尾不能使用const关键字。
*/class Person{private: // 私有,仅类内可以访问 string name;// 固有属性,成员变量 int age;public: // 公开,哪里都可以访问 static int cnt; Person(); // 无参构造函数的声明 Person(string _name,int _age);// 有参构造函数的声明  Person(const Person& p); // 复制构造函数的声明 ~Person(); // 析构函数的声明 // 提供get/set方法 void setName(string _name){ name = _name; } string getName(){ return name; }void setAge(int _age){ age = _age; }int getAge(){ return age; }void show(){ // 成员函数,成员方法 cout<<"[name:"<<name<<", age:"<<age<<"]"<<endl;}
};
int Person::cnt = 0; // 初始cnt // 构造函数的类外实现 
Person::Person(){// 无参构造 cnt ++;cout<<"构造函数:Person()"<<endl;
} 
Person::Person(string _name,int _age){// 有参构造函数  cnt ++;name = _name;age = _age;cout<<"构造函数:Person(string _name,int _age)"<<endl;
}
Person::Person(const Person& p){ // 复制构造函数 cnt ++;name = p.name;age = p.age;cout<<"构造函数:Person(const Person& p)"<<endl;
}
Person::~Person(){ // 析构函数cnt --; 
// 析构函数:无法重载,析构顺序与构造顺序相反 cout<<"析构函数:~Person()"<<name<<endl; cout<<Person::cnt<<endl;
}
int main(){
//	cout<<cnt<<end; // errorcout<<Person::cnt<<endl; // 0Person p1; // 实例化对象,调用无参构造函数 
//	p1.name = "AAA"; // error
//	p1.age = 11;p1.setName("AAA");p1.setAge(11);p1.show();cout<<Person::cnt<<endl; // 1Person p2("BBB", 12);// 实例化对象,调用有参构造函数 p2.show();cout<<Person::cnt<<endl; // 2Person p3(p1);p3.setName("CCC");p3.show(); cout<<Person::cnt<<endl; // 3cout<<p3.cnt<<endl; // 3 return 0;
} 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/786.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

明文scheme拉起此小程序

微信开发文档说明&#xff1a;https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/url-scheme.html 1、开发者无需调用平台接口&#xff0c;在MP平台->设置->隐私与安全->明文Scheme拉起此小程序声明后&#xff0c;可自行根据如下格式拼接app…

Linux-用户身份(概念)

介绍&#xff1a; 1、在Linux的学习过程中如果使用普通用户身份进行操作&#xff0c;则在配置服务之后出现错误时很难判断是系统自身的问题还是因为权限不足而导致的&#xff1b;这无疑会给大家的学习过程徒增坎坷。 一、用户身份 1&#xff09;用户 1、Linux系统中的…

Webrtc 信令服务器实现

webrtc建联流程图 由上图可知&#xff0c;所谓的信令服务器其实就是将peer的offer/candidate/answer传给对端而已。这样的话实现方式就有很多种了&#xff0c;目前普遍的方式HTTP/HTTPS&#xff0c;WS/WSS。像webrtc-demo-peerconnection就是实现HTTP这种方式。本文使用WS&…

《AI聊天类工具之六——​ Google Bard》

一.简介 官网&#xff1a;Try out Bard - Google BARD AI Google Bard是谷歌推出的一款大型语言模型产品&#xff0c;可以视为直接对标OpenAI的ChatGPT。它基于谷歌的对话应用语言模型LaMDA的轻量级版本&#xff0c;使用更少的计算能力&#xff0c;从而能够扩展到更多的人&am…

论文辅助笔记:处理geolife数据

论文笔记&#xff1a;Context-aware multi-head self-attentional neural network model fornext location prediction-CSDN博客 对应命令行里 python preprocessing/geolife.py 20 这一句 1 读取geolife数据 pfs, _ read_geolife(config["raw_geolife"], print_…

Qt gsl库配置踩坑记录

想求解非线性方程组&#xff0c;之前使用拟牛顿法写过相关的matlab代码&#xff0c;这次想移植到C代码&#xff0c;网上说gsl库挺好用的&#xff0c;于是我也想试一下。相关参考&#xff1a; 【C】GSL(GNU Scientific Library) 的安装及在 Visual Studio 2017 中的使用 QT5使用…

深度学习VGG16网络构建(Pytorch代码从零到一精讲,帮助理解网络的参数定义)

&#x1f4da;博客主页&#xff1a;knighthood2001 ✨公众号&#xff1a;认知up吧 &#xff08;目前正在带领大家一起提升认知&#xff0c;感兴趣可以来围观一下&#xff09; &#x1f383;知识星球&#xff1a;【认知up吧|成长|副业】介绍 ❤️感谢大家点赞&#x1f44d;&…

CentOS常见的命令

CentOS&#xff08;Community ENTerprise Operating System&#xff09;是一个基于Red Hat Enterprise Linux源代码构建的开源企业级Linux发行版。在日常的系统管理和维护中&#xff0c;掌握一些常见的CentOS命令是非常必要的。本文将介绍一些CentOS系统中常用的命令&#xff0…

Labview2024安装包(亲测可用)

目录 一、软件简介 二、软件下载 一、软件简介 LabVIEW是一种由美国国家仪器&#xff08;NI&#xff09;公司开发的程序开发环境&#xff0c;它显著区别于其他计算机语言&#xff0c;如C和BASIC。传统的计算机语言是基于文本的语言来产生代码&#xff0c;而LabVIEW则采用图形化…

【nvm环境变量】第一次成功和第二次不成功的区别

当您在终端安装 nvm&#xff08;Node Version Manager&#xff09;或类似的程序时&#xff0c;它通常会在安装过程中自动向当前终端会话添加必要的环境变量配置。这意味着&#xff0c;在安装过程中打开的那个终端会话能够识别 nvm 命令&#xff0c;因为安装脚本可能会临时修改环…

CERLAB无人机自主框架: 1-环境搭建

前言&#xff1a;更多更新文章详见我的个人博客主页【MGodmonkeyの世界】 描述&#xff1a;欢迎来到CERLAB无人机自主框架&#xff0c;这是一个用于自主无人飞行器 (UAV) 的多功能模块化框架。该框架包括不同的组件 (模拟器&#xff0c;感知&#xff0c;映射&#xff0c;规划和…

Day23_学点儿JSON_定义、数据格式、和XML比较、插件

1 JSON定义 定义&#xff1a;是一种轻量级的数据交换格式 JSON是JavaScript Object Notation缩写 特点&#xff1a; 易于程序员阅读和编写。易于计算机解析和生成。其实是javascript的子集&#xff1a;原生javascript支持JSON <script type"text/javascript">…

B-树 B+树与数据库原理

B树 引入 概念和性质 插入分析 总结 B树 B*树&#xff08;了解&#xff09; 数据库原理 数据库与B树的关系

【深度学习实战(10)】图像推理之预处理

一、预处理流程 在把一张图像送入模型进行推理时&#xff0c;需要先进行预处理&#xff0c;预处理流程包括&#xff1a; &#xff08;1&#xff09;读取图像 &#xff08;2&#xff09;尺寸调整&#xff0c;letter_box&#xff08;不失真&#xff09; &#xff08;3&#xff0…

小红的排列构造(dp优化)

题目描述 小红拿到了一个长度为n的数组a&#xff0c;她希望你构造两个排列p和q&#xff0c;满足对于i∈[1,n],ai∈[1,n]pi或qi二选一。你能帮帮她吗&#xff1f;定义排列是一个长度为n的数组&#xff0c;其中1到n每个元素恰好出现1次。 输入描述:第一行输入一个正整数n&#…

Linux平台Alsa库移植

嵌入式Linux平台Alsa库移植 1. Alsa-lib2. Alsa-utilsAplay播放避坑 1. Alsa-lib alsa-lib下载地址&#xff1a;https://www.alsa-project.org/files/pub/lib/ 这里使用的版本是alsa-lib-1.0.29 下载完成并解压&#xff0c;进入alsa-lib-1.0.29目录 编译配置如下&#xff1a; …

关于selenium各种操作语句(方便查询便携版)

定位方法 #功能from selenium import webdriver#载入驱动 from selenium.webdriver.common.by import By #新版载入by,旧版的find_element_by_id语句一般会被划掉&#xff0c;然后给你提示说语句已淘汰&#xff0c;不过目前还是可以运行&#xff0c;只是代码不好看。#启动驱动的…

解释RocketMQ的“消息顺序”特性

RocketMQ的“消息顺序”特性指的是它能按照发送方的预期&#xff0c;保持消息在生产和消费过程中的顺序一致性。这一特性对于某些特定的应用场景至关重要&#xff0c;比如金融交易、订单处理等&#xff0c;在这些场景中&#xff0c;消息的顺序性对于业务逻辑的正确性有着决定性…

解析OceanBase v4.2 Oracle 语法兼容之 LOCK TABLE

背景 在OceanBase V4.1及之前的版本中&#xff0c;尽管已经为Oracle租户兼容了LOCK TABLE相关的语法&#xff0c;包括单表锁定操作&#xff0c;和WAIT N&#xff0c; NOWAIT 关键字。但使用时还存在一些限制。例如&#xff1a;LOCK TABLE只能针对单表进行锁定&#xff0c;并不…

Leetcode287_寻找重复数

1.leetcode原题链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 2.题目描述 给定一个包含 n 1 个整数的数组 nums &#xff0c;其数字都在 [1, n] 范围内&#xff08;包括 1 和 n&#xff09;&#xff0c;可知至少存在一个重复的整数。 假设 nums 只有 一个重复…