C++中继承主要有三种关系:public、protected和private。为了代码复用。
(1)public继承
public继承是一种接口继承,子类可以代替父类完成父类接口所声明的行为。此时子类可以自动转换成为父类的接口,完成接口转换。从语法角度上来说,public继承会保留父类中成员(包括函数和变量等)的可见性不变,也就是说,如果父类中的某个函数是 public的,那么在被子类继承后仍然是public的。
(2)protected继承
protected 继承是一种实现继承,子类不能代替父类完成父类接口所声明的行为,此时子类不能自动转换成为父类的接口。从语法角度上来说,protected继承会将父类中的public可见性的成员修改成为protected可见性,相当于在子类中引入了protected成员,这样在子类中同样还是可以调用父类的protected和public成员,子类的子类也就可以调用被protected继承的父类的protected和public成员。
(3)private继承
private 继承是一种实现继承,子类不能代替父类完成父类接口所声明的行为,此时子类不能自动转换成为父类的接口。从语法角度上来说,private 继承会将父类中的 public 和protected 可见性的成员修改成为 private 可见性。这样一来,虽然子类中同样还是可以调用父类的protected和public成员,但是子类的子类就不可以再调用被private继承的父类的成员了。
子类继承父类除了构造和析构以外的所有函数。
基类不同访问限定符下的成员以不同的继承方式继承后在子类中的访问限定符如下图所示:
继承方式\基类 | public | protected | private |
public | public | protected | 不可见 |
protected | protected | protected | 不可见 |
private | private | private | 不可见 |
public:任意位置可见
protected:本类和子类可见
private:本类中访问