继承方式
public继承
接口继承
基类成员的访问控制级别public, protected, private
protected继承
实现继承,不符合LSP,不能转为基类接口(即无法用基类指针指向派生类)。
基类成员的访问控制级别protected, private
private继承
实现继承,不符合LSP,不能转为基类接口(即无法用基类指针指向派生类)。
基类成员的访问控制级别private
虚函数
虚函数在虚函数表中保存函数地址,确保基类指针指向的派生类可以正确调用函数。
析构函数声明为virtual,确保基类指针指向的派生类可以正确析构(即先调用派生类的析构函数,再调用基类的析构函数;否则将只调用基类的析构函数)。
只有不会被public继承的类才可不将析构函数声明为virtual。
构造函数和析构函数
非public的构造函数:保证了只可由成员函数实例化该类。
非public的析构函数:保证了该类只可用new操作符在堆上创建,而不能在栈上创建。(在栈上创建的对象会被自动销毁,也就说析构函数必须可以访问。 )
PS:
MFC的DECLARE_XXX宏的定义中已包含了访问控制级别。