c++ - 在 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
类setup()
中被覆盖的实现SpecialWrite
。
约束是,我不能将setup
函数从SpecialWrite
类移动到Write
类或BaseWrite
类。如果它有助于上下文,“Special*”类位于一个单独的文件中,并在构建项目时有条件地包含在内。
一种方法是我也可以简单地覆盖类中的setup
函数SpecialCompWrite
并从类中复制代码SpecialWrite
。但我试图避免这种情况。
解决方案
如果CompWrite
可以访问所有公共函数,SpecialWrite
那么多重继承可以解决问题,但是两个类都继承自,Write
因此必须将继承更改为虚拟,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
};
推荐阅读
- impala - Impala AnalysisException:HAVING 子句中不支持子查询
- c# - 如何创建动态 NRules
- git - 有没有办法为两个文本文件版本创建 MS Word 样式的跟踪更改?
- java - Android 平台的 Callkit 示例或示例以及 agora.io 调用服务
- python-3.x - 在 pandas 中使用 groupby 使用计数和列值过滤数据框
- python - 如何停止/暂停嵌入在 C++ 中的 Python 脚本
- c# - 如何检查物体是否在移动/不移动?
- datetime - Pentaho PDI 日期转换使用 Select Values 为 MMM-yy 提供错误的月份值
- node.js - 基于 build ARG 有条件地在 Dockerfile 中设置 ENV vars
- sass - 考拉编译时分页