当前位置: 首页 > 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

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

http://www.dtcms.com/a/201209.html

相关文章:

  • 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)
  • 多类别异常检测新SOTA-MVMCAD
  • 如何通过生成式人工智能认证(GAI认证)提升自己的技能水平?
  • 中小实验室质检LIMS 系统选型 从成本管控到竞争力升级的黄金法则
  • Mybatis操作数据库(2)
  • [学习]POSIX消息队列的原理与案例分析(完整示例代码)
  • 基于DolphinScheduler抽取通用EventBus组件:支持延迟与事件驱动
  • Ubuntu开机自启服务
  • 关于systemverilog中在task中使用force语句的注意事项
  • 第三十八节:视频处理-视频保存
  • 线程调度与单例模式:wait、notify与懒汉模式解析