Не удается получить доступ к защищенному члену, объявленному в классе 'A'

78
10

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

'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");
}

спросил(а) 2021-01-19T20:22:58+03:00 6 месяцев, 2 недели назад
1
Решение
119

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

ответил(а) 2021-01-19T20:22:58+03:00 6 месяцев, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема