继承错误的构造函数调用

时间:2016-06-29 16:05:44

标签: c++ class c++11 inheritance multiple-inheritance

我正在实施这个钻石继承:

class Object {
private:
    int id; string name;
public:
    Object(){};
    Object(int i, string n){name = n; id = i;};
};


class Button: virtual public Object {
private: 
    string type1;
    int x_coord, y_coord;
public:
    Button():Object(){};
    Button(int i, string n, string ty, int x, int y):Object(i, n){
          type = ty;
          x_coord = x;
          y_coord = y;};
};


class Action: virtual public Object {
private:
    string type2;
public:
    Action():Object(){};
    Action(int i, string n, string t):Object(i, n){ type2 = t;};
};


class ActionButton: public Button, public Action{
private:
    bool active;
public:
    ActionButton():Buton(), Action(){};
    ActionButton(int i, string n, string t1, int x, int y, string t2, bool a):
    Button(i, n, t1, x, y), Action(i, n, t2) {active = a;};
};

前三个类的一切正常,但是当我尝试创建一个ActionButton类型的对象时,不是用我写的参数调用构造函数,而是从Object类调用默认的一个。所以每个ButtonAction对象都有一个空字符串,id是一个随机值。我的代码有什么问题,我怎样才能让它正常工作?

1 个答案:

答案 0 :(得分:5)

虚拟基础由最派生类的构造函数直接构造。

您的ActionButton构造函数没有显式调用Object的构造函数,因此会为您调用默认构造函数。