【发布时间】:2021-07-01 10:40:03
【问题描述】:
我有一个带有一个纯虚方法的抽象基类:
class Base
{
public:
virtual void update() = 0;
};
有什么方法可以创建一个继承自Base 的类,覆盖update 方法,但仍强制其子级实现update 方法?像这样:
class Base2 : public Base
{
public:
void update() override
{
if(bSomeCondition)
{
update(); //Calls child's update method
}
}
virtual void update() = 0; // Obviously not like this
};
我知道我可以在 Base2 中创建两个名称稍有不同的新纯虚拟方法,然后在子类中覆盖它们,但如果可能的话,我真的很想保留这些方法名称。
我猜这是不可能的?
【问题讨论】:
-
所以,这是可能的,但目前还不清楚你希望实现什么。什么时候调用中间函数,为什么?
-
我怀疑你最好创建一个 Base0,Base 和 Base2 都是覆盖 Base0 功能的子类
-
通常的方法是直接从
Base派生类,而不是从Base2。换句话说,不要从具体(可实例化)类派生。 C++11 及更高版本,可以通过将Base2标记为final来强制执行。 -
"
// Obviously not like this" -- 好吧,显然“显然”的那一行是显而易见的方法。显然是“明显”行上方的内联定义是问题所在。 :) 我最近有没有提到“显然”比真实的陈述更经常限定虚假陈述?每当你发现自己说的很明显时,都要怀疑自己!
标签: c++