空类及类的注意事项

##空类的成员
类的默认成员函数有六个,为 缺省构造函数、拷贝构造函数、赋值运算符重载、取地址运算符承载、const修饰的取地址运算符重载和析构函数;

	class CEmpty{
	public:
		CEmpty();							//缺省构造函数
		CEmpty(const CEmpty&);				//拷贝构造函数
		CEmpty& operator=(const CEmpty&);	//赋值运算符重载
		CEmpty* operator&();				//取地址运算符重载
		const CEmpty* operator&();			//const修饰的取地址运算符重载
		~CEmpty();							//析构函数
	};

###其他注意事项
构造函数:当用explicit修饰构造函数时,为显示调用构造数,不能做隐式转换;
构造析构顺序:先调用基类的构造函数,后调用派生的构造函数;析构相反;
static:static的用法是将局部的成员变量/函数,变为全局的静态成员;静态成员不在数据具体的实例,static所修饰的成员函数,无this指针传入;
const:const修饰变量,当前修饰变量不可变;const修饰成员函数,隐式传入参数const this指针;
虚析构函数:当基类指针指向指向派生类对象时,基类析构函数被virtual修饰,调用delete时,会自动调用派生类的析构函数;
析构函数私有化:表示当前类的对象只能在堆上创建,不能在栈上创建;


##空类的大小
c++中空类和空结构体的所占大小为1;【c++中在空类和空结构体中增加一个虚设的字节】
no object shall have the same address in memory as any other variable
即c++中任何非空对象在内存中都不能拥有相同地址;为0,违反原则;
###注意事项
空基类最优化:当派生类单一集成空基类时,基类大小优化为0;
空基类中虚析构:基类生成虚函数表,基类中存在指向虚函数表的指针;大小为4;
空基类的多重继承:空基类最优化无法施加于空基类的多重继承;
空类继承空基类:无论空类继承过个空基类,还是空基类,派生的空类依旧为1;
虚基类继承:派生类继承虚基类时,派生类自身维护一个虚基类指针,指向虚基类表;【可以通过指令 cl -d1reportSingleClassLayout[classname] [filename].cpp 查看类的内存分布】
虚基类表和虚函数表:虚基类表存储的是虚基类相对直接继承类的偏移,而虚函数表存储的是虚函数地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值