第三章
封装:
- 权限控制
- 数据和行为在一起
声明与实现分离:
类中函数不占空间的
默认参数只能在声明上。
第四章
-
构造器
类中的默认参数只能在声明处,不能在定义处。 -
拷贝构造器
调用拷贝构造器。 -
private
在同类之间是没有隐私
类中没有new新空间就不需要析构器。
sizeof、strlen
strcpy、memcpy
strcpy:根据’ ’确定拷贝结束位置;
mempy:拷贝的起始位置,以及拷贝的长度进行拷贝;
赋值运算符重载。
深拷贝
数据在栈上还是堆上
- 系统提供默认的赋值运算符重载,一经实现,不复存在。
- 系统提供的也是等位拷贝,也就是浅拷贝,会造成内存泄漏,重析构。
- 要实现深深的赋值,必须自定义。
- 自定义面临的问题有三个:
- 自赋值
- 内存泄漏
- 重析构
- 返回引用,且不能用const修饰。
深拷贝代码
class A()
{
public:
A()
{
cout << this << " constructor"<<endl;
}
~A()
A(const A & another)
{
cout<<this<<" cpy construct from"<< &another<<endl;
}
A & operater operator =(const A &another)
{
cout<<this<<" operator= "<<&another<<endl;
}
};
-
传对象与传引用
- 对于对象在函数中传引用会比拷贝构造效率高得多。
- 传引用等价于,扩大了原对象的作用域。
-
引用与返回
- 栈上的对象是可以返回的,但不能返回栈上的引用(除非返回对象自己)
第五章
- 类中的指针
定义类中的指针,该指针为类整个命名空间下的一个字节偏移量; - 函数指针数组
void (*pa[ ])() = {f, g, i, j};