C++笔记(五)

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

在C++中,类内的成员变量和成员函数分开存储

只有非静态成员变量才属于类的对象

空对象占用内存空间为1个字节,C++编译器会给每个空对象也分配一个字节空间,是为了区分空对象占内存的位置

每个空对象也应该有一个独一无二的内存地址,所以用1个字节来区分

非静态成员变量是属于对象上的 比如类内定义int m_A;对对象使用sizeof查看 大小为4字节

静态成员变量 不属于类对象上 非静态成员函数 不属于类对象上的数据

this指针

每一个非静态成员函数只会诞生一份函数实例,也就是说多个同类型的对象会共用一块代码

那么问题是:这一块代码是如何区分是哪个对象调用自己的呢?

C++通过提供特殊的对象指针,this指针,解决上述问题,this指针指向被调用的成员函数所属的

对象。C++编译器给每个"非静态的成员函数"增加了一个隐藏的指针参数,让该指针指向当前对象

(函数运行时调用该函数的对象),在函数体中所有成员变量的操作,都是通过该指针去访问。只不

过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成。

this指针是隐含每一个非静态成员函数的一种指针

this指针不需要定义,直接使用即可

this指针的用途:

当形参和成员变量同名时,可用this指针区分,this指针指向的是被调用的成员函数所属的对象。

在类的非静态成员函数中返回对象本身,可用return *this。

空指针访问成员函数

C++中空指针也是可以调用成员函数的,但是也要注意有没有用到this指针

如果用到this指针,需要加以判断保证代码的健壮性

const修饰成员函数:

常函数:

  1. 成员函数后加const后我们称这个函数为常函数,修饰的是this指针,让指针指向也不可以修改
  2. 常函数内不可以修改成员属性
  3. 成员属性声明时加关键字mutable后,在常函数中依然可以修改

常对象:

  1. 声明对象前加const称该对象为常对象
  2. 常对象只能调用常函数

this指针的本质是指针常量,指针的指向是不可修改的

友元

友元是C++中一种特殊的,它允许一个类或函数访问另一个类的私有成员。友元在一些特殊情况下非常有用,但也应谨慎使用,因为它会打破封装性和数据隐藏原则。

友元的关键字为 friend,友元的三种实现:全局函数做友元,类做友元,成员函数做友元。

相关推荐
badhope4 小时前
Mobile-Skills:移动端技能可视化的创新实践
开发语言·人工智能·git·智能手机·github
码云数智-园园5 小时前
微服务架构下的分布式事务:在一致性与可用性之间寻找平衡
开发语言
C++ 老炮儿的技术栈5 小时前
volatile使用场景
linux·服务器·c语言·开发语言·c++
hz_zhangrl5 小时前
CCF-GESP 等级考试 2026年3月认证C++一级真题解析
开发语言·c++·gesp·gesp2026年3月·gespc++一级
Liu628885 小时前
C++中的工厂模式高级应用
开发语言·c++·算法
IT猿手6 小时前
基于控制障碍函数的多无人机编队动态避障控制方法研究,MATLAB代码
开发语言·matlab·无人机·openclaw·多无人机动态避障路径规划·无人机编队
AI科技星6 小时前
全尺度角速度统一:基于 v ≡ c 的纯推导与验证
c语言·开发语言·人工智能·opencv·算法·机器学习·数据挖掘
hjxu20166 小时前
【OpenClaw 龙虾养成笔记一】在远程服务器,使用Docker安装OpenClaw
服务器·笔记·docker
sunwenjian8866 小时前
Java进阶——IO 流
java·开发语言·python
波特率1152006 小时前
const关键字与函数的重载
开发语言·c++·函数重载