你能在c++的构造函数中放入if语句以特定的方式设置对象吗?



我有一个类,当为它创建对象时,它将接受4个参数。它们是:一个字符和3个整数。

但是,根据字符是什么,需要以不同的方式设置对象。例如,如果字符为'T',则将所有对象参数设置为0,除了给定的参数,但如果字符为'B',则将所有类参数设置为10,除了给定的参数。

我想在对象创建时执行此操作。

理想情况下,我会像这样重载构造函数:

construct('B', int a, int b, int c) { //set up this way }
construct('T', int a, int b, int c) { //set up another way }

但我认为这是不允许的。

在构造函数中使用if语句是最好的选择吗?
construct(char letter, int a, int b, int c) {
if (letter == 'T'){
//set up this way
} else {
//set up another way
}
}

或者,有没有更好的方法?

编辑:澄清一下,我想我记得我的计算讲师说过,保持构造函数简短是一种好做法(尽管我可能错了)。我的部分问题是;使用if语句的方法会使构造函数不必要地长吗?

谢谢你的帮助,我和一位讲师谈过,他也说了同样的话。if语句是合理的,只有当我放入循环时才会出现问题。公认的答案是有效的,但我决定坚持我所知道的。

可以使用一个判别令牌来区分要调用的构造函数。因为,否则,在示例情况下,参数都是相同的时间。

#include <iostream>
class Foo {
public:
enum B_token{ B };
enum T_token{ T };
Foo(B_token, int, int, int);
Foo(T_token, int, int, int);
int value;
};
Foo::Foo(B_token, int a, int b, int c) : value{a + b + c} {}
Foo::Foo(T_token, int a, int b, int c) : value{a * b * c} {}
int main() {
auto b = Foo{Foo::B, 2, 3, 4};
auto t = Foo{Foo::T, 2, 3, 4};
std::cout << "b:" << b.value << "n";
std::cout << "t:" << t.value << "n";
}

最新更新