class Thing
{
public:
Thing() : _x(10), _y(10), _z(10)
{}
private:
int _x, _y, _z;
};
使用化列表初始化值的顺序不是确定的
类类组合
class Point()
{
public:
Point() : _x(10), _y(10)
{}
private:
int _x, _y;
};
class Circle()
{
public:
Circle(int a, int b, int c) : point(a, b)
{
_r = c;
}
private:
int _r;
Point point;
};
编译单元
在vc这样的开发工具上编写完代码,点击编译按钮准备生成exe文件时,vc其实做了两步工作
iostream输入输出流
类(class)
类成员
类的构造函数
构造函数参数可以初始化默认参数,也可以不初始化
声明哪种对象将匹配哪种构造函数(自动匹配)
使用初始化列表初始化成员变量
类类组合
C++中的this指针
重载
函数的重载:函数名相同,参数列表不同
操作符的重载
赋值符号的重载
深拷贝与浅拷贝
可以将一个对象通过赋值语句赋值给另一个对象,这种赋值是成员一对一的拷贝,称为浅拷贝或逻辑拷贝。如果一个类有指针成员变量,并且指针指向堆空间,这时只拷贝指针本身的值,此时造成两个对象指针指向同一个空间,释放时同一空间被释放两次,内存泄漏。
友元函数(friend)
继承
多态
多态的定义
用一个父类的指针指向一个子类对象
用一个父类的指针当函数的形参,用这个指针可以接收到任何它的子类对象包括它自已
在复合类中,尽量引用高层次的类(父类的指针)当作类的成员变量,这样可以通过它创建出它所对应的任何子类,包括它自已
在容器中,可以声明一个父类指针的容器,这时可以往容器中添加它所对应的任何子类对象,包括它自已
虚函数(virtual)
虚函数调用函数时,与引用或指针所指类型有关与本身没有关系,虚函数的目的就是不管父类的指针或引用指向父类对象还是子类对象都能够反映访对象的真实身份,指向谁调用谁。
如果一个类有子类,则这个类的析构必须要虚析构,否则当delete一个指向子类对象的指针时,将只会调用父类的析构,子类释放了来自父类那一部份成员,而子类自已的扩展成员没有被释放,造成内存泄漏。
虚函数在调用时到底调用哪个版本的函数,在编译时无法确定,只有在运行时才能确定,称之为动态绑定。
构造函数不能为虚函数,析构函数可以为虚函数,inline函数不能虚,普通函数不能虚,成员函数可以虚。
多态的代价(编译器会为每一个包含虚函数的类增加一个指向这个类的虚表的指针成员)
抽象类