从派生类构造函数初始化受保护的数据成员

时间:2013-06-19 16:27:43

标签: c++ oop inheritance

我正在清理我的C ++学习并试图在这里写一个程序。

class Quad{
public:
Quad(){}
protected:
vec _topLeft, _topRight, _bottomLeft, _bottomRight;
};

class IrregularQuad : public Quad{
public:
IrregularQuad(vec topLeft, vec topRight, vec bottomLeft, vec bottomRight)
: _topLeft(topLeft), _topRight(topRight), _bottomLeft(bottomLeft), _bottomRight(bottomRight)
{}
};

我在上面的Dervied类承包商上收到编译错误说: 成员初始化程序_topLeft未指定非静态数据成员或基类(其他成员也有类似错误)

我无法理解正在发生的事情。是不是我无法使用Initalizer列表或其他东西初始化受保护的成员?

3 个答案:

答案 0 :(得分:3)

  

是否我无法使用Initalizer列表或其他内容初始化受保护的成员?

右。只有类'自己的成员可以在构造函数初始化列表中初始化(你可以,OTOH,在构造函数体中分配给它们)。首先初始化基础子对象。

您需要以某种方式将工作委托给基类的构造函数之一:

class Base {

    explicit Base(int i) : m(i)
    {}
protected:
    int m;
};

class Derived : public Base {
    explicit Derived(int i) : Base(i)
    { }
};

答案 1 :(得分:1)

您不会在派生类的初始化列表中初始化基类成员。您可以向Quad添加构造函数来为您执行此操作,也可以在派生类构造函数的主体中自行设置它们。

答案 2 :(得分:0)

这是error C2614: 'ChildClass' : illegal member initialization: 'var1' is not a base or member

的副本

您只能初始化初始化列表中的成员或基类。