C++primer -2

来源:互联网 发布:midascft是什么软件 编辑:程序博客网 时间:2024/04/26 00:28

类和对象

一,对象的大小不考虑方法和静态变量
cpp中 struct-》public class
对象产生-》1.开辟内存(产生this指针)2.调用构造函数
对象析构-》1.处理对象占用的外部资源 2.释放对象内存

成员方法中参数列表中隐藏有一个对象的地址(C *const this)
类体内定义的方法被处理成内联方法(编译时检查)

1>拷贝构造:有指针时默认拷贝构造函数会发生浅拷贝(析构出错),要自定义拷贝构造函数
2>赋值运算法重载:1.防止自赋值 2.释放this 3.重新分配内存 拷贝数据
二,对象生存周期:
1>临时对象:(没有出现类名)CGood g1 = CGood(xxxx);
注:临时对象去拷贝构造对象时 临时对象会被优化掉;所以在函数传参时 传引用可以避免产生临时对象;
临时对象可以使用引用 但是不能使用指针(语句结束就会析构)
2>隐式生成临时对象:
自定义类型的产生的临时量是变量 隐式生成临时对象是常对象
要使用常引用
3> 函数中 对象生存周期:
如果函数的返回的是一个对象=》在调用该函数之前会在主函数的栈上开辟一个临时内存(给函数返回的对象用)
注: 减少开销=》1.传参传引用 2.返回临时对象 3.初始化的方式接收返回值

三,静态/常量
静态成员变量要在类外初始化 且不计入对象的大小 所有的对象共享;
静态成员方法不依赖对象 只依赖类作用域(实参列表里面没有this),只能访问静态成员变量,但是普通方法也可以使用常成员

常对象不能使用普通方法=》实参形参列表不匹配:常对象实参(const CGood const *this)