我有以下几点:
class Abstract
{
virtual void AbstractMethod() = 0;
};
class Implementer
{
void AbstractMethod() {};
};
class Concrete : public Abstract, private Implementer
{};
我无法实例化,Concrete
因为纯虚拟方法AbstractMethod
没有被覆盖。我究竟做错了什么?
您在这里使用多重继承。
具体有两个层次结构,分别处理:
摘要和实施者。由于Abstract与Implementer没有关系,因此在这种情况下(用于同级继承)对virtual的使用将失败。
您需要在派生类中重写虚函数。您无法按照尝试的方式进行操作。
具体来说,如果您要像这样重写它,它将起作用:
class Abstract
{
virtual void AbstractMethod() = 0;
};
class Implementer : private Abstract
{
void AbstractMethod() {};
};
class Concrete : public Implementer
{};
我想指出您在Concrete中使用公共继承或私有继承不会影响该问题。如果您在原始示例中将Implementer更改为public,那么它仍然不是一个具体的类。
有用的辅助信息:在可能的情况下,避免多重继承,更倾向于使用组合而不是继承,并且喜欢浅继承而不是深继承。http://en.wikipedia.org/wiki/Composition_over_inheritance
如果您要经历多重继承的路线,请注意C ++中默认使用单独的继承层次结构,并且需要虚拟继承来组合不同的路径(虚拟方法仍然需要派生类来覆盖它们,但不能同级)http://en.wikipedia.org/wiki/Multiple_inheritance
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句