我有以下情况:
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
?
最佳答案
Fork
和 Spoon
之间没有内在联系,而且它们都有一个名为 use
的虚函数这一事实并不构成一个.但是,如果您添加一个新类,例如定义纯虚函数 use()
的 Utensil
,并派生 Fork
和 Spoon
从它作为一个虚拟基地,你有一个连接。这样,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/