提问者:小点点

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


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

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类复制代码。但我尽量避免。


共1个答案

匿名用户

如果Compwrite可以访问SpecialWrite中的所有公共函数,则多重继承可以解决该问题,但两个类都继承自Write,因此必须将继承更改为virtual,则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
};

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(c++|中|派生类|之间|共享|公共|代码)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?