使用受保护的成员

时间:2015-04-04 23:28:09

标签: c++

我无法理解如何让子类使用父类中的受保护成员。

假设在父类中,我有一个公共函数,它将设置data_parent,一个受保护的成员,等于某个值。

现在,在子类中,我有一个名为data_child的受保护成员,并且在公共中有一个函数,它将返回data_parent + data_child。

但是,当我尝试编译时,我收到错误"使用未声明的标识符' data_parent' &#34 ;.我做错了什么?

2 个答案:

答案 0 :(得分:3)

我无法解释您的错误消息,除非您的代码与您的描述有所不同。

以下基本上是你所描述的,除了我添加了构造函数(可选),为成员函数选择了名称,并添加了一个驱动程序来测试。它没有错误。

#include <iostream>

class Parent
{
    public:
       Parent() : data_parent(0) {};
       void SetDataParent(int x) {data_parent = x;};
    protected:
        int data_parent;
};

class Child: public Parent
{
    public:
       Child() : Parent(), data_child(0) {};
       void SetDataChild(int x) {data_child = x;};
       int GetSum() const {return data_child + data_parent;};
    protected:
        int data_child;
};

int main()
{
    Child child;
    child.SetDataParent(42);
    child.SetDataChild(100);
    std::cout << child.GetSum() << '\n';
}

我的猜测是你遗忘了Child继承Parent,导致家庭关系相当紧张。

答案 1 :(得分:0)

解决了这个问题。我没有意识到继承普通类和模板类之间存在差异。我需要包括

using Parent<type>::data_parent;