C++继承中的访问控制实例分析(2)
protected继承:比protected级别高的访问权限会变成protected。即父类中的public属性在子类中变为protected,父类中的protected和private属性在子类中不变。
private继承:比private级别高的访问权限会变成private。即父类中的三种访问属性在子类中都会变成private。
class A { // 基类 public: string A_public; // 公有成员 protected: string A_protected; // 受保护成员 }; class B : private A { // 私有继承 public: B(){ A_public="public"; A_protected="protected"; }; }; int main() { B b; // 通过B的对象访问 cout << b.A_public <<" "<< b.A_protected << endl; // 错误,因为是私有继承 return 0; }
如果我们在派生列表中不使用访问说明符,则struct关键字默认的是公有继承,class关键字默认的是私有继承。不过建议在继承时最好显式地将访问说明符写出来。
另外,不同的继承方式也会影响派生类向基类的转换,假定Derive继承自Base:
1.只有当Derive公有地继承自Base时,用户代码才能使用派生类向基类的转换;如果Derive继承Base的方式是受保护的或者私有的,则用户代码不能使用该转换。
2.不论Derive以什么方式继承Base,Derive的成员函数和友元都能使用派生类向基类的转换;派生类向其直接基类的类型转换对于派生类的成员和友元来说永远是可访问的。
3.如果Derive继承Base的方式是公有的或者受保护的,则Derive的派生类的成员和友元可以使用Derive向Base的类型转换;反之,如果Derive继承Base的方式是私有的,则不能使用。
- 上一篇:C++多重继承与虚继承分析
- 下一篇:C++中虚函数与纯虚函数的用法