| 基类成员\继承方式 | 共有继承 | 私有继承 | 保护继承 |
| 私有成员 private | Private | 不可访问 | 不可访问 |
| 保护成员 protected | protected | private | protected |
| 公有成员 public | public | private | protected |
在派生类构建构造函数和析构函数时候需要注意:
基类的构造函数和析构函数不能被派生类继承;
如果基类没有定义构造函数,派生类也不能定义构造函数,都要采用默认构造函数(由于编译器对提供构造函数有条件,那么在这种情况下,啥都别干就行了)。
如果基类定义了带参数的构造函数,那么派生类要定义性的构造函数,提供一个将参数传递给基类构造函数的途径。
如果派生类的基类也是派生类,每个派生类只负责直接基类的构。
派生类是否要定义析构函数和所属的基类无关。
基类和派生类的构造函数和析构函数的执行顺序如下:
基类的构造函数
派生类的构造函数
派生类的析构函数
基类的析构函数
虚函数与多态性、纯虚函数
用virtual关键字申明(定义)的函数叫做虚函数,在基类的函数前面加上virtual关键字,在派生类中重写该函数,运行时会根据对象的实际类型来调用相应的函数,这就是c++的多态性,在基类中定义一个统一的接口函数,在不同的派生类中重写该函数,实现不同的功能。
纯虚函数是指被标明为不具体实现的虚成员函数,凡是有纯虚函数的类叫做抽象类。抽象类不能声明对象,只能作为基类为派生类服务,派生类必须完全实现基类的纯虚函数,否则派生类也会变成抽象类。
Virtual void functionName()=0;//纯虚函数
函数的覆盖与隐藏
构成覆盖的条件:
基类函数必须是虚函数;
发生覆盖的2个函数必须分别处于基类和派生类中;
函数名称与参数列表必须完全相同(是不是返回值类型也必须相同?)
构成隐藏的条件:
基类和派生类的函数完全相同,基类没有使用virtual关键字;
基类和派生类的函数名相同,参数不同,此时不管基类函数是否使用virtual关键字,基类的函数都被隐藏。
函数重载发生在同一个类中,覆盖和隐藏发生在基类和派生类关系中。
引用
偶然的机会看到了《Effective C++》中关于引用的建议,对于不需要修改原值的引用,使用引用时尽量加上const关键字,避免对原值造成修改(记不大清楚了,大概是这样)。
引用的定义:int &a=b;
看到一个小程序,不引入第三个变量,交换2个变量的值。
void change(int& a,int& b)
{
a=a+b;
b-a-b;
a=a-b;
}//有一面试的时候被问到了,当时没答出来
VC++程序编译链接的原理和过程
有点小复杂,一时间理解不了,有空慢慢研究。