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

C++多继承:父类已实现纯虚函数时如何避免重复实现

问题根源

你遇到的是C++菱形继承引发的抽象类问题:

  • 顶层抽象类ISegmentReader包含纯虚函数readCacheFromDb()
  • ISegmentManager和SegmentReader都以普通继承方式继承ISegmentReader,导致SegmentManager多重继承后会拥有两个独立的ISegmentReader基类子对象
  • SegmentReader::readCacheFromDb()仅覆盖了自身分支下ISegmentReader的纯虚函数,但ISegmentManager分支下的ISegmentReader纯虚函数仍未被实现,因此SegmentManager被判定为抽象类,无法实例化。
无需重新实现的解决方案

通过虚继承让所有派生类共享同一个ISegmentReader基类实例,这样SegmentReader实现的函数就能覆盖唯一的纯虚函数:

修改两处继承关系为虚继承即可:

// 将ISegmentManager的继承改为虚继承
class ISegmentManager: public virtual ISegmentReader
{
    // readCacheFromDb无需重新声明
    // ...
};

// 将SegmentReader的继承改为虚继承
class SegmentReader: public virtual ISegmentReader
{
public:
    void readCacheFromDb() override final;
};

修改后,SegmentManager中只会存在一个ISegmentReader基类子对象,SegmentReader的readCacheFromDb()会覆盖这个唯一的纯虚函数,SegmentManager不再是抽象类,可正常实例化,无需额外声明实现SegmentManager::readCacheFromDb()。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 18:37:16