假设我有一个名为Base
的抽象基类,它继承了另一个名为Rectangle
的类(w / c具有x,y,w,h的属性)
//Base.h
class Base abstract : public Rectangle
{
public:
Base();
void Show()
{
if (!visible) return;
//draw the stuff here.
}
virtual void PerformTask() = 0;
protected:
bool visible;
bool enable;
//other member variables
};
对于继承此Base
的所有类,它必须首先执行此简短操作:
void OtherClass1::PerformTask()
{
if (!enable) return; // <- this one I am referring to.
//else, proceed with the overriden operation
//...
}
在PerformTask()
中,它是否可以进行默认操作,因为我不会在其所有实现中再次重新键入它,但同时会被覆盖并且首先执行short operation
并保留?
答案 0 :(得分:4)
是的,这可以做到;只需使PerformTask
非虚函数调用实际重写函数:
// In Base:
void PerformTask() {
if (not enabled) return;
PerformTaskImpl();
}
virtual void PerformTaskImpl() = 0;
...然后在派生类中重写PerformTaskImpl
。
这实际上是一种非常常见的模式。