gpt4 book ai didi

具有复杂赋值的c++构造函数初始化列表

转载 作者:太空宇宙 更新时间:2023-11-04 12:49:00 25 4
gpt4 key购买 nike

假设我想要一个接收一些参数的构造函数,并且使用这些参数我可以计算它的成员变量的值。除了成员变量的值不是来自参数的简单赋值。它们需要创建其他对象并转换值,然后才能将它们用作成员变量的值。

要塞进一个初始化列表就太麻烦了。效率也非常低,因为您无法创建变量并重用它们,因此您将不得不复制代码(并制作同一对象的多个拷贝)以适应初始化列表中的所有代码。

另一种选择是不使用初始化列表,让默认构造函数被调用,然后用简洁的计算覆盖构造函数中的值。

如果类没有默认构造函数怎么办?如何巧妙地做到这一点?

/* 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
{}
};

最佳答案

添加一些静态转换方法如何?

class C {
private:
static B transform1(D&);
static B transform2(D&);
public:
A a;
C(D d) :
a{transform1(d),transform2(d)}
{}
};

相关:

关于具有复杂赋值的c++构造函数初始化列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49957072/

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