【发布时间】:2015-08-27 07:09:46
【问题描述】:
我的遗留代码有一个包含许多其他子类作为数据成员的类。其中大多数将各种输入读入子类中的数据成员。它看起来像这样:
MainClass::MainClass(std::string &directory, LogClass &logClass, int mode1, int mode2, int mode3,) :
logClass(logClass),
subClass1(directory, logClass, mode1),
subClass2(directory, logClass),
subClass3(logClass, subClass1, subClass2, mode1, mode2),
subClass4(logClass, subClass1, subClass2, subClass3, mode1, mode2, mode3),
{
if(mode2 == 0)
{
subClass3.init();
}
subClass4.init();
}
在某些子类中,初始化发生在其构造函数的主体中。在其他时候,重要数据成员的初始化发生在 mainClass 的主体中,如 subClass3 和 subClass4 的情况。
我正在更改此代码以包含处理先前读入数据的转换的其他子类。其中一些新类需要在构造它们之前初始化其他类。例如,如果我添加 subClass5,它可能需要运行 subClass4.init()。但是从代码中可以看出, subClass4.init() 直到构造函数的主体才运行。
这里有什么好的政策可以继续前进?我是否应该将所有初始化从子类构造函数中提取到它们自己的 init() 函数中,并在主类构造函数中正确排序它们?或者我应该将所有初始化移动到子类构造函数和托盘中并正确排序?
我正在尝试找出最适合此问题的代码设计。
【问题讨论】:
-
如果示例反映了遗留代码,我会考虑对其进行重构。每当我看到“模式”参数时,我都觉得应该通过子分类来完成,或者——最好是——使用策略或类似的模式。
标签: c++ class constructor