【发布时间】:2012-11-15 14:26:30
【问题描述】:
我在 c++ 中有以下类
class MyClass {
public:
bool flag;
MyClass (bool flag = false) {
this->flag = flag;
}
...
};
在我的主要(用于测试)中,我有类似的东西
int main() {
MyClass number1 = MyClass(true);
MyClass number2 = MyClass(false);
MyClass number3 = new MyClass(false);
MyClass number4 = new MyClass(true);
MyClass number5 = new MyClass();
std::cout << number1.flag << number2.flag << std::endl;
std::cout << number3.flag << number4. flag << number5.flag << std::endl;
}
我的输出(想象布尔输出真或假,输出格式更好)
true, false
true, true, true
问题是当我使用“new”关键字创建一个“MyClass”对象时,无论我在参数构造函数中做什么或不做什么,它都会始终将标志变量设置为 true。
它适用于不使用“new”的构造函数,但不适用于使用它的构造函数。我知道使用和不使用关键字 new 之间的唯一真正区别是,如果不使用它,则在堆栈上创建变量,否则在堆上创建变量。我看不出这会一直出错。
如果我想让它正常工作,需要改变什么? 我在类中确实有其他方法可以成功修改标志变量,但初始化它不起作用。我也尝试使用成员初始化列表来构造变量,但这也不起作用。
感谢您的帮助!
编辑:这是编译的代码。我有两个文件,Test.c++ 和 AbstractCell.h。 AbstractCell 是 MyClass,当此代码运行时,它会输出“isAlive: 1”
void test_abstract_2(){
AbstractCell one = new AbstractCell();
std::cout << std::endl << "isAlive: " << one.alive << std::endl;
}
【问题讨论】:
-
该代码不应该编译。
new返回一个指针。 -
您从未运行过该代码,它根本无法编译!
-
对我来说编译得很好,是 include 和
return 0;的缩写。没有理由不以当前形式编译。 -
。 . .它确实可以编译。 . .所以呀。 . .我跑了。 . .这就是我知道输出错误的方式。 . .啊啊啊啊啊
-
Aside:尽可能在构造函数中使用初始化列表,例如:
MyClass (bool flag = false) : flag(flag) { }
标签: c++ constructor arguments