为什么直接从另一个构造函数调用的构造函数不能修改C++中的类变量?
例如,在以下代码中,evenNum()被调用,但是val类变量未修改。因此,它打印0(默认值),而不是预期的2。
#include <iostream>
class evenNum {
public:
int val;
evenNum(){
this->val = 2;
}
evenNum(int var)
{
if(var%2==0){
this->val = var;
}else{
evenNum();
}
}
};
int main() {
evenNum e(7);
std::cout << e.val;
}
最佳答案
线
evenNum();
创建一个临时对象。它对正在构造的对象不起作用。
您可以使用委派构造器,也可以直接设置成员变量的值。
evenNum(int var) : evenNum()
{
if(var%2==0){
this->val = var;
}
}
要么
evenNum(int var)
{
if(var%2==0){
this->val = var;
}else{
this->val = 2;
}
}
使用委托(delegate)的构造函数更好。它清楚地表达了意图并减少了代码重复。