gpt4 book ai didi

c++ - 主构造函数中子类的初始化 - 主构造函数体与子类构造函数体

转载 作者:太空宇宙 更新时间:2023-11-04 13:29:03 24 4
gpt4 key购买 nike

我有一个遗留代码,其中有一个类包含许多其他子类作为数据成员。其中大多数将各种输入读入子类中的数据成员。它看起来像这样:

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() 函数中,并在主类构造函数中对它们进行正确排序?或者我应该将所有初始化移动到子类构造函数和托盘中并正确排序吗?

我正在尝试针对此问题找出最合适的代码设计。

最佳答案

这取决于 init() 函数的语义。他们在做什么?他们的构造函数是做什么的?为什么使用两个不同的函数(构造函数和 init)进行初始化?

在我看到的很多代码中,通常init 的功能主要是由于其实现者的草率造成的。从 C++ 的角度来看,它们所做的属于构造函数。

另一方面,如果 init() 函数用于执行某些语义上与对象构造不相交的事情(例如启动计时器、触发某些事件、 ...),也许它们与构造函数不相交是件好事。不过,在这种情况下,我会更改他们的名字。

关于c++ - 主构造函数中子类的初始化 - 主构造函数体与子类构造函数体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32242846/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com