我在理解以下代码时遇到一些困难。我有3个类:A,B和C.A有一个类型为int的私有x。 B继承A及其中的所有内容。 C继承自B但受保护。这意味着在C类中X和Y都变得不可访问了。而且,get_x()和get_y()在C类中受到保护。所以C应该能够访问get_x()和get_y()函数而不能访问x和y?
#include<iostream>
using namespace std;
class A
{
int x;
public: A(int i):x(i){}
int get_x(){ return x; }
};
class B: public A
{
int y;
public: B(int i,int j):y(i),A(j){}
int get_y(){ return y; } };
class C: protected B
{
int z;
public: C(int i,int j,int k):z(i),B(j,k){}
int get_z(){ return z; }
};
int main()
{
C c(1,2,3);
cout<<c.get_x();
cout<<c.get_y();
cout<<c.get_z();
return 0;
}
答案 0 :(得分:4)
您似乎理解“受保护的继承权”,但却误解了“受保护的成员和方法”。
受保护的方法无法从课堂外进行。
含义
C c(1,2,3);
cout << c.get_x(); // THIS DOES NOT WORK.
您可以访问get_x()在C类中。
class C: protected B
{
int z;
public: C(int i,int j,int k):z(i),B(j,k){}
int get_z(){ return z; }
int get_x_from_c() { return this->get_x(); } // THIS IS ALLOWED.
};
答案 1 :(得分:1)
这里,即使类型C类的对象也不能使用类A和B的功能。如果要访问成员函数,则将B的公共访问权限转换为C. 做这个 ... class c:public B {..然后它将能够访问函数但不记得成员变量。