如何使用私有继承的方法重写纯虚拟方法?

丹·内斯特(Dan Nestor)

我有以下几点:

class Abstract
{
    virtual void AbstractMethod() = 0;
};

class Implementer
{
    void AbstractMethod() {};
};

class Concrete : public Abstract, private Implementer
{};

我无法实例化,Concrete因为纯虚拟方法AbstractMethod没有被覆盖。我究竟做错了什么?

M2tM

您在这里使用多重继承。

具体有两个层次结构,分别处理:

摘要和实施者。由于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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用私有继承的方法重写纯虚拟方法?

来自分类Dev

SWIG JAVA如何使用%interface和纯虚拟方法包装C ++多重继承

来自分类Dev

继承的类重写虚拟方法依赖项

来自分类Dev

对单表继承使用私有方法

来自分类Dev

无法使用继承的纯虚拟方法分配抽象类型的对象

来自分类Dev

在继承的类中受保护的公共虚拟方法被重写

来自分类Dev

Java继承中的私有方法

来自分类Dev

Java继承中的私有方法

来自分类Dev

反思继承的私有方法

来自分类Dev

如何正确重写虚拟方法以添加功能?

来自分类Dev

如何正确重写虚拟方法以添加功能?

来自分类Dev

如何扩展继承的方法而不是重写它?

来自分类Dev

使用继承重写@RequestMapping方法

来自分类Dev

继承中的重写方法

来自分类Dev

如何继承泛型虚拟方法?

来自分类Dev

私有继承和虚拟功能

来自分类Dev

如何将继承或包含的公共方法更改为私有方法

来自分类Dev

虚拟方法继承类

来自分类Dev

虚拟方法继承类

来自分类Dev

如何在运行时Objective-C中重写/处理私有类的方法?

来自分类Dev

如何在目标C中从超类重写私有方法和属性

来自分类Dev

如何在目标C中从超类重写私有方法和属性

来自分类Dev

我们如何访问C ++中的私有虚拟方法?

来自分类Dev

重写方法X时,从继承的方法对X的调用将使用X的重写还是重写的实现?

来自分类Dev

如何从重写的子类方法调用超类的继承方法?

来自分类Dev

Python中的纯虚拟方法

来自分类Dev

抽象和纯虚拟方法

来自分类Dev

重写SKNode的removeChild无证/私有方法是否安全?

来自分类Dev

在(非)静态类中重写私有方法

Related 相关文章

热门标签

归档