假设我想要一个接收一些参数的构造函数,并且使用这些参数我可以计算它的成员变量的值。除了成员变量的值不是来自参数的简单赋值。它们需要创建其他对象并转换值,然后才能用作成员变量的值。
这是塞进初始化列表的方法。也非常低效,因为您无法创建变量并重用它们,因此您必须复制代码(并制作同一对象的多个副本)以适合初始化程序列表中的所有代码。
另一种选择是不使用初始化列表,而是调用默认构造函数,然后用简洁的计算覆盖构造函数中的值。
现在如果类没有默认构造函数怎么办?怎么能巧妙地做到这一点?
/* a class without a default constructor */
class A {
public:
B x1
B x2
A(B x1_, B x2_) : x1{x1_}, x2{x2_} {};
};
/* a class that contains an A object and needs to initialize it based on some complex logic */
class C {
public:
A a;
C(D d) :
a{b1,b2} // ultimately I just want to initialize a with two B objects
// but unfortunatelly they require a lot of work to initialize
// including instantiating other objects and using tons of methods
{}
};