一个类是否有可能在其构造函数的参数中设置从另一个类继承的变量的值?

时间:2017-10-22 19:32:12

标签: c++ inheritance

A包含受保护的int x。类B扩展了类A。现在,类B想要做的是将x的值设置为它自己的构造函数中的传递参数。当我尝试这样做时,我收到错误:

  

“”x“不是非静态数据成员或类”B“”的基类。

#include <string>
#include <iostream>

class A {
protected:
    int x;
public:
    A()
    {
    }
};

class B : public A {
public:
    B(int x)
        : x(x)
    {

    }
};

int main()
{

}

1 个答案:

答案 0 :(得分:4)

你可以“设置”它,但不能初始化它,因为它已经在初始化基类对象时被初始化了。你可以像这样“设置”它:

B(int x) 
{ 
    this->x = x; // assignment, not initialization
}

A的一个构造函数更有意义地处理A::x的初始化:

A(int x) : x(x) {}

然后在B中使用它:

using A::A; // allows B b{42};