c++ - 是否有可能确定/断言,如果一个虚函数被覆盖,另一个虚函数也被覆盖?

标签 c++ inheritance virtual

我有一个声明虚方法并定义默认实现的现有类。现在我想用 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/

相关文章:

c++ - 标准输出并需要刷新它 C++

C++ OpenGL 着色器不工作

c++ - 使用索引安全方式迭代 STL 容器以避免使用锁?

javascript - 在变量赋值表达式中混淆使用逗号和换行符使 var 看起来是全局的

包含任何类型的模板类对象的 C++ 映射

javascript - 检测虚拟键盘与硬件键盘

c++ - 用于向所有 mpi 进程发送和接收的时间高效设计模型 : MPI all 2 all communication

java - 在java中将枚举类型作为参数传递

linux - 运行 Web 服务器 (lightttpd) 和 (curl) 客户端的 Linux 服务器上的隔离测试网络

c++ - .cpp 文件中的虚拟 C++ 方法实现是否应该标记为虚拟?