在 C++ 中的派生类之间共享公共代码

Posted

技术标签:

【中文标题】在 C++ 中的派生类之间共享公共代码【英文标题】:Sharing common code between derived classes in C++ 【发布时间】:2020-11-30 14:56:40 【问题描述】:

在下面的示例中尝试在派生类之间共享公共代码时遇到问题:

class BaseWrite 
    public:
    virtual void setup() 
;

class Write : public BaseWrite 
    public:
    void show() 
        cout << "Show Write" << endl;
    
    virtual void print() 
        cout << "print Write" << endl;
        
;

class CompWrite : public Write 
    public:
    void compFunc() 
        cout << "compFunc details" << endl;
    
;

//These below "Special" classes are in a separate file and are conditionally included while building the project

class SpecialWrite : public Write 
    public:
    void setup() override 
        cout << "print SpecialWrite setup()" << endl;
    
;

class SpecialCompWrite : public CompWrite 
    public:
    //any common functions
;

在上面的示例中,CompWrite(或SpecialCompWrite)对象应该能够访问Write 类的所有功能,以及在SpecialWrite 类中被覆盖的setup() 实现。

限制是,我无法将 setup 函数从 SpecialWrite 类提升到 Write 类或 BaseWrite 类。如果它有助于上下文,“Special*”类位于单独的文件中,并在构建项目时有条件地包含在内。

一种方法是我可以简单地覆盖SpecialCompWrite 类中的setup 函数,并从SpecialWrite 类复制代码。但我试图避免这种情况。

【问题讨论】:

I cannot move up the setup function from SpecialWrite class to the Write class or BaseWrite class. 为什么? 【参考方案1】:

如果CompWrite 可以访问SpecialWrite 中的所有公共函数,那么多重继承可以解决问题,但是两个类都继承自Write,因此必须将继承更改为虚拟,CompWrite 类看起来喜欢:

class CompWrite : public Write, public SpecialWrite 

如果setup() 函数是唯一需要访问的函数,那么SpecialWriteCompWrite 继承的新类可能会解决它。

class SetupWrite : public Write 
    public:
    void setup() override 
        cout << "print SpecialWrite setup()" << endl;
    
;

...

class CompWrite : public SetupWrite 
    public:
    void compFunc() 
        cout << "compFunc details" << endl;
    
;

...

class SpecialWrite : public SetupWrite 
    public:
    // Other functions
;

【讨论】:

以上是关于在 C++ 中的派生类之间共享公共代码的主要内容,如果未能解决你的问题,请参考以下文章

关于 C++ 中的类派生的问题?

C++通过其派生类对象调用公共父类方法

Swig C++ to C#:如何从 C++ 包装类以使模板类中的方法在 C# 的派生类中可用?

C++中的派生类,可以不定义对象直接调用基类的成员和调用自己的成员函数嘛???

使用 Boost Python 从 c++ 类创建派生的 Python 类

派生类的 C++ 查找表