C++ 多重继承:如果父级之一已经实现了相同的函数,则避免重新实现纯虚函数

问题描述 投票:0回答:1

我在 C++ 中有这个类层次结构:

class ISegmentReader
{
public:
    virtual void readCacheFromDb() = 0;
    //...
};

class ISegmentManager: public ISegmentReader
{
    //readCacheFromDb not redeclared
    //... 
};

class SegmentReader: public ISegmentReader
{
public:
    void readCacheFromDb() override final;
};

class SegmentManager: public ISegmentManager, public SegmentReader
{
    //readCacheFromDb not redeclared
    //... 
};

int main()
{
  SegmentManager manager;
}

我希望能够在

SegmentReader::readCacheFromDb
中隐式使用
SegmentManager
。然而,每当我尝试编译时,我都会得到:

... invalid new-expression of abstract class type ‘SegmentManager’ ...
because the following virtual functions are pure within ‘SegmentManager’
...

ISegmentReader::readCacheFromDb()’
    virtual void readCacheFromDb() = 0;

我可以在不重新声明/重新实现的情况下解决这个问题的任何方法:

SegmentManager::readCacheFromDb(){
    SegmentReader::readCacheFromDb();
}

非常感谢

c++ multiple-inheritance
1个回答
0
投票

问题似乎出在 ISegmentManager 类的编译中。由于 ISegmentReader 是一个抽象类,因此它需要在 ISegmentManager 中实现纯虚函数。有两种不同的方法可以解决它。

  1. 在 ISegmentManager 中定义一个空函数体的函数。
  2. 要使函数成为虚拟函数而不是纯虚拟函数,请在基类中具有空函数体并使用派生 SegmentManager 类中的 SegmentReader::readCacheFromDb() 实现
© www.soinside.com 2019 - 2024. All rights reserved.