再次求教关于构造函数

来源:百度知道 编辑:UC知道 时间:2024/05/17 05:56:42
#include <iostream.h>

class MyClass{
public:
MyClass();
MyClass(int);
~MyClass();
void Display();
protected:
int number;
};

MyClass::MyClass(){ cout <<"Constructing normally.\n"; }

MyClass::MyClass(int m):number(m)
{
cout <<"Constructing with a number: " <<number <<endl;
}

void MyClass::Display(){ cout <<"Display a number: " <<number <<endl; }

MyClass::~MyClass(){ cout <<"Destructing.\n"; }

void main()
{
MyClass obj1;
MyClass obj2(20);

obj1.Display();
obj2.Display();
}
运行结果
Constructing normally.
Constructing with a number: 20
Display a number: 1
Display a number: 20
Destructing.
Destructing.

为什么第三行的number值为1啊
是不是应该理解为赋值伪随机的

你的obj1调用的是无参构造函数,因此obj1.number未初始化,输出值是内存中之前运算保留的值,所以输出是不可预计的。

错了...因为编译器给你申请的内存地址里正好存是1,所以输出是1
我这里输出是2009118740...

这个涉及到不同编译器的变量初始化问题,和编译器相关,我的输出结果是
Constructing normally.
Constructing with a number: 20
Display a number: -858993460
Display a number: 20
Destructing.
Destructing.
我用的 是VS2008