构造函数的继承打错的电话[复制](Inheritance wrong call of constru

2019-09-30 10:05发布

这个问题已经在这里有一个答案:

  • 多重继承一个基类 2个回答

我implemeting这个菱形继承:

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的随机值。 这有什么错我的代码,我怎样才能使其正常工作?

Answer 1:

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

ActionButton构造函数不显式调用Object的构造函数,所以默认构造函数被调用为您服务。



文章来源: Inheritance wrong call of constructors [duplicate]