无法访问受保护的成员

时间:2015-06-10 22:11:03

标签: c++ inheritance

我在理解以下代码时遇到一些困难。我有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;
}

2 个答案:

答案 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 {..然后它将能够访问函数但不记得成员变量。