在用C进行多年编程之后,我正在用C++迈出第一步。
我正在尝试掌握“ protected ”概念,网络上有很多资料解释protected变量是什么以及它们的用途。但是,当尝试编写一个 super 基本的示例时,只是为了弄清楚C++,我碰到了一个错误:

因此,将不胜感激。

class parent {
public:
    int getProtected() { return protected1; }
protected:
    int protected1;
};

class child: public parent { };

int main()
{
    child ch;

    cout << ch.protected1 << endl;    // error: 'int parent::protected1' is protected within this context
    cout << ch.getProtected() << endl;   // OK
    return 0;
}
到处都说protected变量只能在继承层次结构中访问。如果是这种情况,我会尝试理解-我在这里做错了什么?
“保护变量”的概念尚未真正出现。private众所周知,因为私有(private)变量属于子实例,因此只能由子方法访问。但是,如果子级可以访问父级的protected变量,是否意味着在子级可以访问此protected变量之前必须实例化父级?

最佳答案

如您的示例所示,只能通过父类或子类的成员函数访问 protected 成员变量。从而:

ch.protected1
不会编译,因为您试图从类外部访问数据成员。

07-26 09:42