C++ 面向对象模型 小知识点

空类 大小

空类的 sizeof 结果是 1。原因:每个对象都应该在内存上有独一无二的地址,因此给空对象分配 1 个字节空间。
当定义了一个变量后,则类的大小为这个变量的大小。

类中 变量和函数是分开存储的。

静态成员变量 ,静态成员函数 ,成员函数,都不占用类的空间。
每一个非内联成员函数只会诞生一份函数实例.

this指针工作原理

类的多个对象会共用一块代码,类中的成员函数如何区分哪个对象调用自己的呢?
当一个对象被创建后,它的每一个成员函数都含有一个系统自动生成的隐含指针this,用以保存这个对象的地址.
this指针 指向 被调用的成员函数 所属的对象。
this指针并不是对象的一部分,不会影响sizeof(对象)的结果。
this指针是一种隐含指针,它隐含于每个类的非静态成员函数中。
静态成员函数内部没有this指针,静态成员函数不能操作非静态成员变量。

this指针的使用

当形参和成员变量同名时,可用 this 指针来区分
在类的非静态成员函数中返回对象本身,可使用 return *this;

空指针调用成员函数

现象
cpp 复制代码
//空指针调用成员函数
Person *p = NULL;
p->show();

如果 show() 中没有使用成员属性 ,则不会报错, 否则会报错.

预防

在成员函数开头加上判断

cpp 复制代码
if(this == NULL)
{
	return;
}
相关推荐
努力学习的小廉26 分钟前
【C++】 —— 笔试刷题day_13
开发语言·c++·哈希算法
阿巴~阿巴~1 小时前
蓝桥杯速成刷题清单(上)
c语言·c++·算法·蓝桥杯
ChoSeitaku1 小时前
NO.84十六届蓝桥杯备战|动态规划-路径类DP|矩阵的最小路径和|迷雾森林|过河卒|方格取数(C++)
c++·矩阵·蓝桥杯
rqtz1 小时前
【C++面向对象】封装(上):探寻构造函数的幽微之境
c++·深拷贝浅拷贝
李匠20241 小时前
C++学习之服务器EPOLL模型、处理客户端请求、向客户端回复数、向客户端发送文件
运维·服务器·c++·学习
owde2 小时前
深入 C++ 线程库:从创建到同步的探索之旅
开发语言·c++·thread·lock
吾名招财3 小时前
基于机器视觉的多孔零件边缘缺陷检测(源码C++、opencv、凸包、凸缺陷检测)
c++·opencv·机器视觉·凸包·凸缺陷
T0uken3 小时前
【C++】信号槽与事件总线的轻量实现
开发语言·c++
山居秋暝LS3 小时前
学习OpenCV C++版
c++·opencv·学习
要下雨了吗3 小时前
指针数组 vs 数组指针
c语言·数据结构·c++·算法·visual studio