You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++如何使用基类实现来满足接口类纯虚方法的重写要求?

问题原因

C++多重继承场景下,不同基类的虚函数属于各自独立的虚函数表。BASE类实现的虚方法f()仅会覆盖BASE类自身的虚函数签名,不会自动实现INTERFACE类定义的纯虚方法f(),因此DERIVED类仍然包含未实现的纯虚函数,属于抽象类,无法直接实例化。

解决方案

在DERIVED类中显式实现INTERFACE要求的纯虚方法f(),内部直接转发调用BASE类的f()实现即可,修改后的完整代码如下:

class BASE
{
public:
    BASE() = default;
    ~BASE() = default;
    virtual void f(){}
};

class INTERFACE
{
public:
    // 补充说明:如果需要通过INTERFACE指针销毁DERIVED实例,建议此处析构函数声明为virtual ~INTERFACE() = default;
    virtual void f() = 0;
};

class DERIVED :
        public INTERFACE, public BASE
{
public:
    DERIVED() = default;
    ~DERIVED() = default;
    // 显式实现INTERFACE的纯虚f,转发到BASE的实现
    void f() override {
        BASE::f();
    }
};
效果验证
int main() {
    DERIVED d;
    // 直接调用DERIVED实例的f
    d.f();
    // 通过INTERFACE指针调用f
    INTERFACE* intf_ptr = &d;
    intf_ptr->f();
    // 两种调用方式最终都会执行BASE::f()的实现,符合需求
    return 0;
}

内容的提问来源于stack exchange,提问作者Peter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 14:57:02