父类的成员 | public 公有继承的子类 | protected 保护继承的子类 | private 私有继承的子类 |
---|---|---|---|
public 公有成员 | 能够继承,继承后是public 公有成员 | 能够继承,继承后是protected 保护成员 | 能够继承,继承后是private 私有成员 |
protected 保护成员 | 能够继承,继承后是protected 保护成员 | 能够继承,继承后是protected 保护成员 | 能够继承,继承后是private 私有成员 |
private 私有成员 | 不能继承 | 不能继承 | 不能继承 |
1. class 的默认继承关系(就是缺省继承关系关键字,例如 class Child : Parent)是 private 私有继承, struct 的默认继承关系是 public 公有继承。
If no access level is specified for the inheritance, the compiler assumes private for classes declared with keyword class
and public for those declared with struct
.
2.对象只能调用其public部分的成员,而不能调用protected和private部分的成员。protected和private成员在类内部成员函数中使用。
3.构造函数和析构函数不能继承(正所谓儿子无法继承父亲的生死)。
4. 若子类Child重写(overwrite)了父类Parent的同名方法,则类Parent的实例调用的是类Parent的方法,类Child的实例调用的是类Child的方法;将类Child实例的指针指向类Parent的指针变量ptr,则通过ptr调用的是类Parent的方法;
5. 若定义了类Child的实例son,则通过son实例调用类Parent的方法的用法为:
son.Parent::method(paramlist)
适用于method是父类Parent的公有成员,而子类 Child 保护或私有继承 Parent;
6. 若子类与父类方法同名,但是参数列表不一致,在子类中调用父类方法,由于重写规则,导致编译出错。此时可以使用 using Parent::method; 语句,使父类方法在子类中可见。
参考材料:
Friendship and inheritance - C++ Tutorials