【问题标题】:Sharing common code between derived classes in C++在 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. 为什么?

标签: c++ oop inheritance


【解决方案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
};

【讨论】:

    猜你喜欢
    • 2013-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-14
    • 1970-01-01
    • 2017-05-19
    • 1970-01-01
    相关资源
    最近更新 更多