我试图实现以下类:C++多重和虚拟继承
class a {
public :
//...
f();
//...
};
class b : virtual public a {
public :
//...
f();
//...
}
class c : virtual public a {
public :
//...
f();
//...
}
class d : virtual public c {
public :
//...
f();
//...
}
class e : public b, public d {
public :
//...
}
但是编译器告诉我,为成员函数f()的要求是不明确的。 我想'e'继承'd'的f()版本(所以'c'),但只有在'e'中重新声明f()时才会编译代码。所以,我只能编译如果我如下的代码“E”的构造函数:
e::e(...) : a(...), c(...), b(...), d(...)
{
}
这似乎不合逻辑对我来说,因为从“C”“d” inherate和“b”将首先建造。
+1 - '用d :: F;'是一个不错的选择。第三种方法是添加'void f(){d :: f(); }'to'class e' - 在这里没有必要,但有时在修改参数时有用,记录添加等等。 –
这只是因为我不会不确定编译器为什么要按照特定的顺序构建构造函数,因为,在我看来,b是要先建成的。谢谢你的回答,但我会使用'使用'方法。 – Kernael