无法访问类 'A' 中声明的受保护成员

Cannot access protected member declared in class 'A'

本文关键字:声明 受保护 成员 访问      更新时间:2023-10-16

这是我在OOP课程的一个例子中发现的一段代码。当我试图编译它时,我得到了以下错误:

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

由于继承,B难道不能访问A的受保护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");
}

B可以访问A的成员x,但只能访问它继承的成员。它无法访问A的另一个实例(f中的a.x(的成员x