【发布时间】:2016-02-29 06:47:20
【问题描述】:
在我的 C++ 中,我有如下内容
class AbstractA {
void Foo() = 0;
void Bar() = 0;
void Woo() = 0;
};
class AbstractB : public AbstractA {
void Doh() = 0;
};
class Obj1 : public AbstractA {
void Foo() {}
void Bar() {}
void Woo() {}
};
现在我想定义一个新类Obj2,即Obj1,并且是(实现)AbstractB。基本上
class Obj2 : public Obj1, public AbstractB {
void Doh();
};
这里出现编译错误。
经过一些考虑,我怀疑我必须(重新)定义 Foo()、Bar() 和 Woo() 在 Obj2 内,因为编译器不知道解决它们的正确路径(基本上从 @987654330 传递@ 或 AbstractB?)。我对这一点是否正确?
如果是这样,并且由于我解析Foo()、Bar() 和Woo() 的正确路径总是从ObjA 传递,是否有任何语法可以避免每个方法调用父类?换句话说,我能比
class Obj2 : public Obj1, public AbstractB {
void Doh();
void Foo() { A::Foo() }
void Bar() { A::Bar() }
void Woo() { A::Woo() }
}
【问题讨论】:
-
基本原则如果你不想做多重继承,你必须使用Virtaul显式其他明智的编译器会提示错误,因为编译器无法确定父级的路由多重继承也称为钻石问题
标签: c++ syntax-error multiple-inheritance virtual-functions