2015-06-10 166 views
1

我在理解下面的代碼時遇到了一些困難。我有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?如果你想要的成員函數訪問,則使B和C. 公共接入做到這一點... C類無法訪問受保護的成員

#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; 
} 

回答

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

這裏鍵入C類的對象,即使不能使用A類和B的功能:public B {..然後它將能夠訪問函數但不記得成員變量。

相關問題