延伸:
简单地说下C++类的3种继承方式,分别是public继承,protected继承,private继承。
最常用的还是public继承。class默认的是private继承,它的member如果没写权限也是默认
private。struct则相反,默认的是public继承。结合下面的图示和代码,对C++的继承就有了比较清晰的认识了。
private成员变量:
protect成员变量:
public成员变量
public继承的时候,以下可行。也就是只有is-a关系的时候,才能采用父类引用绑定子类对象以及父类指针绑定子类对象。
class Human
{
Human() {}
virtual ~Human() {} // 父类应该有个虚析构函数
}
class man : public Human
{
}
man myman;
Human& myhuman = myman; // 父类引用绑定子类对象
Human* myhuman = new man(); //父类指针指向子类对象
private继承,其实是一种组合关系,确切的说是组合关系中的is-implemented-in-terms-of关系。例如根据Human类实现Man类
class Timer
{
Timer(int time) {}
virtual ~Timer() {} // 父类应该有个虚析构函数
virtual void CallBack() {} // 到time时间后会被调用的虚函数
}
class MsgQueue: private Timer
{
private: // 采用private,避免CallBack被用户误用
virtual void CallBack() {}