我有一个声明虚方法并定义默认实现的现有类。现在我想用 differend 参数重载该方法并提供默认实现。此外,我想强制执行约束,即如果第一个方法被子类覆盖,那么第二个(重载的)虚拟方法也必须被覆盖。
在 C++ 中这甚至可能吗?如果可以,是否可以在编译时实现?
示例代码:
class ParamA {};
class ParamB {};
class Base
{
public:
virtual void method(ParamA a)
{
// default behavior
}
virtual void method(ParamB b)
{
// default behavior
}
}
class Derived : public Base
{
public:
virutal void method(ParamA)
{
// special behavior
}
}
我的目标是检测 Derived
类型的类并强制它们实现它们的 method(ParamB b)
verison。
最佳答案
不,您不能指定必须重写哪些成员函数集的复杂约束。唯一的限制适用于个别功能;纯虚拟 (=0
) 强制覆盖,并且(在 C++11 中)final
防止覆盖。
您能做的最好的事情就是将这两个函数都设为纯虚函数,从而强制派生类重写这两个函数。这至少迫使派生类的作者考虑什么需要重写;不可能覆盖一个而忘记另一个。
您仍然可以提供默认实现,这样不想重写任何一个函数的派生类只需要调用默认版本的非常短的重写。
关于c++ - 是否有可能确定/断言,如果一个虚函数被覆盖,另一个虚函数也被覆盖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8851320/