【C++之多层继承】成员在各类的范围内的访问属性
题目要求
有以下程序结构,请分析所有成员在各类的范围内的访问属性。
#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 |
上机验证
#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;
} 【腾讯云】新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
#C/C++##c++#C++学习 文章被收录于专栏
c++面向对象程序设计课, 作业题选自谭浩强的《c++面向对象程序设计》(第2版)


