c++ - 通过继承实现纯虚函数

标签 c++ inheritance virtual

我有以下情况:

class Fork {
    public:
        virtual void use() = 0;
};

class Spoon {
    public:
        virtual void use() = 0;
};

class SilverSpoon : public Spoon {
    public:
        virtual void use() { }
};

class SilverSpork : public SilverSpoon, public Fork {
    public:
        using SilverSpoon::use;
};

我希望 SilverSpork 中的 SilverSpoon::use 定义纯虚函数 Fork::use。但是,我得到

error: cannot declare variable ‘spork’ to be of abstract type ‘SilverSpork’
note:  because the following virtual functions are pure within ‘SilverSpork’:
note:  virtual void Fork::use()

有没有办法不用添加就可以解决这个问题

virtual void use() {
    SilverSpoon::use();
}

SilverSpork

最佳答案

ForkSpoon 之间没有内在联系,而且它们都有一个名为 use 的虚函数这一事实并不构成一个.但是,如果您添加一个新类,例如定义纯虚函数 use()Utensil,并派生 ForkSpoon 从它作为一个虚拟基地,你有一个连接。这样,SilverSpork 选择 SilverSpoon::use 的实现作为 use 中的重写器它的直接基础 Fork。这就是所谓的“支配”。

class Utensil {
public:
    virtual void use() = 0;
};

class Spoon : public virtual Utensil {
public:
    virtual void use() = 0; // or can omit this, relying on Utensil
};

class Fork : public virtual Utensil {
public:
    virtual void use() = 0; // or can omit this, relying on Utensil
};

class SilverSpoon : public Spoon {
public:
    void use() { }
};

class SilverSpork : public SilverSpoon, public Fork {
}; // OK: SilverSpoon::use overrides Fork::use

关于c++ - 通过继承实现纯虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16109966/

相关文章:

java - 解释这个输出

java - hibernate 继承缓存,CacheKey 中使用的实体名称不正确?

python - 在Raspberry Pi 3上设置virtualenv和virtualenvwrapper时出现问题

Java - 多个装饰器不起作用

c++ - Mat::copyTo() 函数错误

c++ - 将 char* 数组传递给函数

c++ - 可视化应用程序表单设计器

c++ - 有没有办法在 Linux 上将文本输出到不同颜色的文件?

c++ - 从内部类继承

c++ - 为什么子类调用它父类的方法而不是它自己的?