2015-09-03 4 views
0

Это фрагмент кода, который я нашел в примере на одном из моих курсов ООП. Когда я пытаюсь скомпилировать его я получаю следующее сообщение об ошибке:Невозможно получить доступ к защищенному члену, объявленному в классе 'A'

'A::x' : cannot access protected member declared in class 'A'. 

Из-за наследства, не должно B быть в состоянии получить доступ к защищенному это Int?

#include<iostream> 
using namespace std; 

class A 
{ 
protected: int x; 
public: A(int i = -16) { x = i; } 
     virtual A f(A a) { return x + a.x; } 
     void afisare() { cout << x; } 
}; 

class B : public A 
{ 
public: B(int i = 3) :A(i) {} 
     A f(A a) { return x + a.x + 1; } 
}; 

int main() 
{ 
    A *p1 = new B, *p2 = new A, *p3 = new A(p1->f(*p2)); 
    p3->afisare(); 
    system("Pause"); 
} 

ответ

6

B может получить доступ к A «s член x, но только один он наследует. Он не может получить доступ к члену x другого экземпляра A (a.x в f).

Смежные вопросы