在下面的示例中,尝试在派生类之间共享公共代码时遇到困难:
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
类复制代码。但我尽量避免。
如果Compwrite
可以访问SpecialWrite
中的所有公共函数,则多重继承可以解决该问题,但两个类都继承自Write
,因此必须将继承更改为virtual,则Compwrite
类将如下所示:
class CompWrite : public Write, public SpecialWrite {
如果setup()
函数是唯一需要访问的函数,那么specialwrite
和compwrite
继承的新类可以解决这个问题。
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
};