当前位置: 首页 > news >正文

C++对象模型和this指针Project5

成员变量和成员函数分开储存

非静态成员变量 属于类的对象上
静态成员变量 非静态成员函数 静态成员函数 不属于类的对象
空对象占用内存为1
c++编译器会给每个空对象也分配一个字节空间,是为了区分空对象占内存的位置
每个空对象也应该有一个独一无二的内存地址

this指针概念(project5 filename01)

this指针指向被调用的成员函数所属的对象
this指针隐含每一个非静态成员函数内的一种指针
this指针不需要定义,直接使用即可
this指针的用途:
当形参和成员变量同名时,可用this指针来区分
在类的非静态成员函数中返回对象本身,可使用return *this

include

using namespace std;
class Person {
public:
Person(int age) {
//this 指针指向 被调用的成员函数 所属的对象
this->age = age;
}
int age;
Person& PersonAddAge(Person& p) {
//this指向p2的指针,而*this指向的就是p2这个对象本体
//如果你返回值是一个Person值传递会创造一个新的对象 如果用引用的方式就会一值相加
this->age += p.age;
return *this;
}

};
//解决名称冲突
void test01() {
Person p1(18);
cout << p1.age << endl;
}
//返回对象本身用*this
void test02() {
Person p1(10);
Person p2(10);
p2.PersonAddAge(p1).PersonAddAge(p1);
cout << p2.age << endl;

}
int main() {
test01();
test02();
system("pause");
return 0;
}

类和对象-对象特性-空指针访问成员函数(project5 filename02)

C++中空指针也是可以调用成员函数的,但是也要注意有没有用到this指针
如果用到this指针,需要加以判断保证代码的健壮性

include

using namespace std;
//空指针调用函数
class Person {
public:
void showClassName() {
cout << "这是一个Person类" << endl;
}
void showPerson() {
//解决方法 如果有this指针
if (this == NULL) {
return;
}
cout << m_age << endl;//这里隐含了一个this指针
}
int m_age;
};
void test03() {
Person* p = NULL;//指针person指向为空

p->showClassName();
p->showPerson();//输出不了 

}
int main() {
test03();
system("pause");
return 0;
}

类和对象-对象的特性-const修饰成员函数

常函数
成员函数后加const后我们称为这个函数为常函数
常函数内不可以修改成员属性
成员属性声明时加关键字mutable后 在常函数中依然可以修改
常对象:
声明对象前加const称该对象为常对象
常对象只能调用常函数

include

using namespace std;
//常函数
class Person {
public:
//this指针的本质是 是指针常量 指针的指向是不可以修改的
//const Person*const this;
//在成员函数后面加上const 修饰的是this指向 让指针指向的值也不可以修改
void showPerson() const{
//m_Age = 100;
m_B = 100;
//this = null //this指针不可以修改指针的指向
}
void func() {
m_Age = 100;
}
int m_Age;
mutable int m_B;//特殊变量 即使在常函数中 也可以修改这个值 加上mutable
};
void test04() {
Person p;
p.showPerson();
}
//常对象
void test02() {
const Person p;
//p.m_Age = 100;
p.m_B = 100;//特殊值,在常对象下也可以修改
p.showPerson();//
//p.func();//常对象只能调用常函数
}
int main() {

system("pause");
return 0;

}

http://www.jsqmd.com/news/26747/

相关文章:

  • ubuntu24 输入法优化
  • 基于DCT变换和Huffman编码的图像压缩解压缩算法matlab性能仿真
  • 轻松获取 Excel 工作表的名字【Java 自动化教程】 - E
  • 2025年10月25日,工信部人才交流中心PostgreSQL认证考试完成!
  • 微擎商户的流量增长秘籍:低成本高转化的种草新玩法
  • 2025年络合铁脱硫剂厂家爱权威推荐榜单:沼气脱硫剂/天然气脱硫剂 /铁基脱硫剂源头厂家精选
  • 勿以小恶而为之
  • 【SPIE出版 | 连续4届EI检索 | 检索稳定】第五届智慧交通与城市工程国际学术会议 (STCE 2025)
  • 大规模随机数据
  • 2025 年 PE 管厂家最新推荐榜,技术实力与市场口碑深度解析PE 排水管/PE 穿线管/PE 消防管公司推荐
  • K8s学习笔记(十二) volume存储卷 - 实践
  • 2025年大型横梁式货架厂家权威推荐榜单:工厂仓储货架/重型货架 /中型货架剂源头厂家精选
  • 【Java】导入项目后project模式没有src等目录,只有pom.xml
  • 2025 年波纹管厂家最新推荐榜,深度剖析企业技术实力、产品品质与市场口碑碳素波纹管/PVC 双壁波纹管/PVC 单壁波纹管公司推荐
  • 2025 年 10 月网站建设厂家推荐排行榜,外贸独立站推广,阿里巴巴/1688店铺代运营,短视频拍摄运营,商标注册,小程序开发公司精选
  • 读书笔记:关于Oracle分区表:当数据想搬家时会发生什么?
  • revit 链接模型的图元获取
  • 2025 年微孔分析仪厂家最新推荐榜,技术实力与市场口碑深度解析,筛选高性能可靠优质品牌
  • 机器视觉在半导体行业的重要性(以51camera晶圆隐裂检测系统为例)
  • 性能调优:分页SQL语句的优化
  • 2025年水式喷砂机定做厂家爱权威推荐榜单:小五金件喷砂/数控喷砂机 /管壁喷砂机厂家精选
  • 超简单的公众号排版,新手经验分享
  • 2025年质量好的面条生产线实力厂家TOP推荐榜
  • 2025年质量好的上料搅拌车最新TOP厂家排名
  • 蓝牙基础(一):蓝牙软硬件架构介绍
  • 微波雷达和毫米波雷达有什么区别
  • 蓝牙基础(二):蓝牙核心系统架构
  • 2025年河道挖泥船厂家爱权威推荐榜单:水库挖泥船/清淤挖泥船 /吸污船源头厂家精选
  • PyAibote RPA办公自动化
  • 2025年比较好的纺织橡胶辊品牌厂家排行榜