C ++上的错误:“错误:在此上下文中保护int aaa :: bbb”

在用C编程多年之后,我正在用C ++迈出第一步。

我正在尝试理解“受保护”的概念,网络上有很多资料解释protected变量的含义以及它们的用途。但是,当尝试编写一个超级基本的示例时,只是为了弄清楚C ++,我碰到了一个错误:

错误:“ int parent :: protected1”在此上下文中受保护

因此,将不胜感激。

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众所周知,因为私有变量属于子实例,因此只能由子方法访问。但是,如果子级可以访问父级的protected变量,这是否意味着在子级可以访问此protected变量之前必须实例化父级?

iCMS 回答:C ++上的错误:“错误:在此上下文中保护int aaa :: bbb”

受保护的成员变量只能通过父类或子类的成员函数访问,如您的示例所示。因此:

ch.protected1

无法编译,因为您试图从类外部访问数据成员。

,

第一个问题:据说到处都只能在继承层次结构中访问受保护的变量。如果是这种情况,我正在尝试了解-我在做什么错了。

您正在尝试从main访问受保护的成员,并且main在继承层次结构之外。就像private在该类之外的代码中隐藏了某个类的实现的一部分一样,protected在该层次结构之外的代码中隐藏了该类的一部分的实现。由于main既不在类中,也不在层次结构中,所以protectedprivate都对它隐藏。

第二个问题:“保护变量”的概念尚未真正出现。“私有”是众所周知的,因为私有变量属于子实例,因此只能由子方法访问。但是,如果子级可以访问父级的受保护变量,这是否意味着必须先实例化父级,才能子级访问此受保护的变量?

必须先实例化父级,然后才能实例化子级。孩子是父母的实例。

如果您有class car : public vehicle,则每个car也是vehicle。如果您拥有类car的实例,那么您必然也有vehicle的实例。

,

protected意味着您的类child可以访问parent类(从中公开继承)类的protected1字段。相反,如果protectedprivate,则child将无法访问此变量。

您的main()函数不在parent的派生类中-因此它无法访问protected字段。

,

您正尝试直接访问 类成员protected1。仅当成员为public时才有可能。

您的课程child仍可以访问该成员,因此您可以尝试:

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

class child: public parent { 
public:
  int getProtectedFromChild() { return protected1; }
};

int main()
{
    child ch;

    cout << ch.getProtected() << endl;   // OK
    cout << ch.getProtectedFromChild() << endl;   // This should work
    return 0;
}
本文链接:https://www.f2er.com/1958916.html

大家都在问