我有两类机器和人类,几乎从原子继承。现在我写了一个名为“Cyborg”的类,并希望从Cyborg初始化Atom。代码是
#include <iostream>
using namespace std;
class Atom {
public:
Atom(size_t t): transformium(t) {};
private:
const size_t transformium;
};
class Human : public virtual Atom {
public:
Human(string name) : Atom(-1), name(name) {}
protected:
string name;
};
class Machine : public virtual Atom {
public:
Machine() {}
Machine(int id) : id(id) {}
protected:
int id;
};
class Cyborg : public Human, public Machine {
public:
Cyborg(string name, int id) : Atom(0), Human(name) {}
};
int main() {
Cyborg cyborg("robocup", 911);
return 0;
}
但是,CXX编译器要求Machine初始化Atom,因为const成员“transformium”。
error: constructor for 'Machine' must explicitly initialize the base class 'Atom' which does not have a default constructor
答案 0 :(得分:3)
正如编译器错误所示,您必须在Atom
的构造函数中显式初始化基类Machine
。
原因是您可以创建Machine
的实例。对于这样的对象,必须有一种方法来正确初始化Atom
的{{1}}部分。
<强>更新强>
Machine
的初始化方式会有所不同,具体取决于您是创建Atom
,Human
还是Machine
的实例。这是您的代码的更新版本,其中包含一些解释。
Cyborg
输出:
Came to Atom::Atom() ------------------ Came to Atom::Atom() ------------------ Came to Atom::Atom()