• 5929阅读
  • 4回复

一个c++初始化成员列表的问题请教 [复制链接]

上一主题 下一主题
离线donylnx
 
只看楼主 倒序阅读 楼主  发表于: 2006-09-13
这是我看到的一个例子,可是不明白贴出来请教一下
#include <iostream.h>

class A{
int zise;
int first,last;
public:
A(int f, init l):first(f), last(l),size(first - last){}
~A(){}
void print()
{
cout << first << " " << lasr << " " << size <<endl;
}
};

void main()
{
A a(10, 20);
a.print();
}
在我看来结果应该是10 20 -10 可是结果却是10 20 0,想不明白,请指点一下,为什么size的赋值会是0呢?谢谢!
[ 此贴被XChinux在2006-09-14 19:29重新编辑 ]
离线donylnx
只看该作者 1楼 发表于: 2006-09-13
程序粘错了,有语法错误,重新贴一次
#include <iostream.h>

class A{
   int size;
   int first,last;
public:
   A(int f, int l):first(f), last(l),size(first - last){}
   ~A(){}
   void print()
   {
       cout << first << " " << last << " " << size <<endl;
   }
};

void main()
{
   A a(10, 20);
   a.print();
}
离线steven820218

只看该作者 2楼 发表于: 2006-09-14
这涉及到成员列表初始化的顺序问题,它们是按照声明的顺序初始化的,首先初始化size(first-last),由于first和last还没有赋值,所以size会得到一个不可预测的值。
离线steven820218

只看该作者 3楼 发表于: 2006-09-14
解决办法:改一下声明顺序就可以了:
  int first,last;
  int size;
离线donylnx
只看该作者 4楼 发表于: 2006-09-14
哦,明白了,非常谢谢!
快速回复
限100 字节
 
上一个 下一个