赞
踩
有以下程序结构,请分析所有成员在各类的范围内的访问属性。
#include <iostream> using namespace std; class A {public: void f1( ); protected: void f2(); private: int i; }; class B: public A {public: void f3( ); int k; private: int m; }; class C: protected B {public: void f4(); protected: int n; private: int p; }; class D: private C {public: void f5(); protected: int q; private: int r; }; int main() {A a1; B b1; C c1; D d1; return 0; }
——谭浩强的《C++面向对象程序设计》第5章习题第6小题
在基类的访问属性 | 继承方式 | 在派生类的访问属性 |
---|---|---|
private | public | 不可访问 |
private | private | 不可访问 |
private | protected | 不可访问 |
public | public | public |
public | private | private |
public | protected | protected |
protected | public | protected |
protected | private | private |
protected | protected | protected |
根据成员在基类的访问属性和继承方式,可以得到成员在派生类的访问属性。
成员 | 在A类的属性 | 在B类的属性 | 在C类的属性 | 在D类的属性 |
---|---|---|---|---|
f1 | public | public | protected | pricate |
f2 | protected | protected | protected | private |
i | private | 不可访问 | 不可访问 | 不可访问 |
f3 | - | public | protected | private |
k | - | public | protected | private |
m | - | private | 不可访问 | 不可访问 |
f4 | - | - | public | private |
n | - | - | protected | private |
p | - | - | private | 不可访问 |
f5 | - | - | - | public |
q | - | - | - | protected |
r | - | - | - | private |
// https://blog.csdn.net/weixin_43470383/article/details/110492612 #include <iostream> using namespace std; class A { public: void f1(); // 在B、C和D类中都可以访问 protected: void f2(); // 在B、C和D类中都可以访问 private: int i; // 在B、C和D类中都不可以访问 }; class B : public A { public: void f3() { f1(); // 可以访问公用基类的公用成员函数 f2(); // 可以访问公用基类的保护成员函数 // i = 5; // 不可访问公用基类的私有成员 }; int k; // 在C和D类中都可以访问 private: int m; // 在C和D类中都不可以访问 }; class C : protected B { public: void f4() { f1(); // 可以访问保护基类的公用成员函数 f2(); // 可以访问保护基类的保护成员函数 f3(); // 可以访问保护基类的公用成员函数 // i = 5; // 不可访问 k = 5; // 可以访问保护基类的公用成员 // m = 5; // 不可访问保护基类的私有成员 } protected: int n; // 在D类中可以访问 private: int p; // 在D类中不可以访问 }; class D : private C { public: void f5() { f1(); // 可以访问私有基类的公用成员函数 f2(); // 可以访问私有基类的保护成员函数 f3(); // 可以访问私有基类的公用成员函数 f4(); // 可以访问私有基类的公用成员函数 // i = 5; // 不可访问 k = 5; // 可以访问私有基类的公用成员 // m = 5; // 不可访问 n = 5; // 可以访问私有基类的保护成员 // p = 5; // 不可访问私有基类的私有成员 } protected: int q; private: int r; }; int main() { A a1; B b1; C c1; D d1; return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。