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

C++类与对象--3 C++对象模型和this指针

3.1 类成员分开存储

  • 成员变量和成员函数在内存中是分开存储的
  • 只有非静态成员变量是存储在对象上的
  1. C++为空对象分配1字节的空间
  2. 非空对象的大小为其内部非成员变量大小总和
  • 静态成员不占对象空间
  • 不同对象的成员函数共享一个函数实例,不占对象空间(通过this指针进行区分函数属于哪个对象)

3.2 this指针

(1)概念

  • this指针的本质是一个指针常量-->指向不能改变
  • this隐含在每一个非静态成员函数内
  • 不需要单独定义,可直接使用

(2)用途

  • 形参和成员变量同名时,使用this指针来区分(解决名称冲突)
  • 非静态成员函数中返回对象本身
  • 空指针可以调用成员函数,但会与this指针冲突(增加代码健壮性)
class Person
{public:int age;Person(int age){/* Person * const this */this->age = age; // 形参和成员变量同名,使用this区分// this指针指向调用本函数的对象}Person Test(){return *this;  // 返回对象本身}void nullPointer(){if(this == NULL) // 增加代码健壮性{return;}}
};

3.3 const修饰成员函数

(1)常函数

  • 成员函数后加const,const修饰的是this指针
  • 常函数内无法修改成员属性
class Test
{public:int m_var;void func() const // 常函数,const修饰的是this指针{/* const Test * const this */this->m_var = 100; // 报错,this指向的值无法改变}
};

(2)常对象

  • 声明对象前加const

  • 常对象只能调用常函数,不允许修改本身的属性

相关文章:

  • interface接口和defer场景分析
  • 深入理解动态规划:从斐波那契数列到最优子结构
  • ORPO:让大模型调优更简单高效的新范式
  • Ubuntu——配置静态IP
  • python next 函数
  • 大模型训练计算显存占用
  • 部署springBoot项目的脚本-linux
  • 【MYSQL】基本查询,表的增删查改
  • 树莓派系列教程第八弹:结合 ESP32-CAM 实现远程摄像头监控
  • Effective C++阅读笔记(item 1-4)
  • 【Vue】路由2——编程式路由导航、 两个新的生命周期钩子 以及 路由守卫、路由器的两种工作模式
  • 网络工程师案例分析
  • 【Android】一键创建Keystore + Keystore 参数说明 + 查询SHA256(JDK Keytool Keystore)
  • 从 “龟速” 到流畅,英国 - 中国 SD-WAN 专线让分公司直连总部系统
  • js逆向反调试的基本 bypass
  • 智慧招生:实时数字人在院校招生中的应用
  • 深度学习实战107-基于Qwen3+GraphRAG+Agent的智能文档管理系统:精准问答与决策支持
  • 【OSS】如何使用OSS提供的图片压缩服务
  • 大二周周练翻译
  • 动态规划-LCR 089.打家劫舍-力扣(LeetCode)
  • 国家发改委:进一步完善促进民营经济发展的制度机制
  • 可显著提高公交出行率,山东、浙江多县常态化实施城区公交免费
  • 特朗普亲家有了新工作:美国驻法大使
  • 国家发改委:安全是低空经济发展的首要前提,稳妥推进低空旅游、航空运动等发展
  • 专访|金七猫奖得主:以非遗为舟,在现实题材中疗愈与成长
  • 中国古代文学研究专家、南开大学教授李剑国逝世