钱能《C++程序设计》中有一处不解,请指教。
钱能《C++程序设计》一书,P287
#include <iostream.h>
class A
{
public:
A (int j):num(j),age(num+1)
{cout<<"num="<< num <<" age=" << age<<endl;}
private:
int num;
int age;
};
void main()
{
A s(16);
}
书中说到:
“运行结果为: num=15, age=2
由于按成员在类定义中的声明顺序进行构造,而不是按构造函数说明中冒号后面的顺序,所以num成员被赋的是一个随机值,并不是想赋的16,因为这时候,成员age还没有被赋值,age的内存空间中是一个随机值。”
我在VC6.0中测试了一下,结果就是"num=16, age=17",和书中说法并不一致,难道的编译器的问题,或者C++的版本有所更新的缘故?
请指教!
问题点数:20、回复次数:5Top
1 楼axlw(bloodflower)回复于 2003-09-02 19:04:26 得分 5
好像没什么毛病,等待高手Top
2 楼sevecol(sevecol.blogone.net)回复于 2003-09-02 19:09:23 得分 5
你的num不是 num(j)了吗?
然后才是age(num+1)
你是不是写错了例子?Top
3 楼sevecol(sevecol.blogone.net)回复于 2003-09-02 19:10:38 得分 5
关于顺序是正确的,可能是书上的例子错了
Top
4 楼yangsiqun(灌水是我有声的抗议)回复于 2003-09-02 19:11:33 得分 5
是啊,我也怀疑是写错例子了!
这个没问题啊!Top
5 楼woodie(woodie)回复于 2003-09-02 19:25:08 得分 0
刚才我重新确认了一下书上的例题,private处的两个变量声明顺序确实弄反了。
应该是:
....
private:
int age;
int num;
....
如此,书中结果就能解释了。
是我马虎了,不好意思。有劳大家!
结贴,散分Top




