今天发现有这样两句话:
1. 基类的保护成员对于派生类的成员是可访问的。
2. 派生类的成员只能通过派生类对象访问基类的保护成员,派生类对一个基类对象中的受保护成员没有访问权限。
这两句话看的太头晕了,其实作者应该是想表达:只有在派生类中才可以通过派生类对象访问基类的protected成员。看这样的代码:
class Base { public: Base(); private: void foo(); protected: int m; }; class
Derive :public Base { public: Derive(); }; Derive::Derive() { this->m = 1; //
这里访问m没有问题 }
使用类的代码:
Derive *d = new Derive(); std::cout<< d->m <<endl; // 这里就报错了
总结一下三个关键字的访问范围:
public: 能被类成员函数、子类函数、友元访问,也能被类的对象访问。
private: 只能被类成员函数及友元访问,不能被其他任何访问,本身的类对象也不行。
protected: 只能被类成员函数、子类函数及友元访问,不能被其他任何访问,本身的类对象也不行。
还是上面的两个类,只看public和private,如下代码:
Base *b = new Base(); b->test_pub(); // 通过 b->foo(); // 报错 std::cout<< b->m;
// 报错
protected继承和private继承能降低访问权限:
使用private继承,父类的protected和public属性在子类中变为private
使用protected继承,父类的protected和public属性在子类中变为protected
使用public继承,父类中的protected和public属性不发生改变
热门工具 换一换