看了这个段文章,才理解原来成员变量的初始化是按照声明的次序完成的。
我自己写了一个小程序来验证一下:
file Aaa.h:
/*
* Aaa.h
*
* Created on: Feb 28, 2015
*/
#ifndef AAA_H_
#define AAA_H_
class Aaa {
public:
int c,b,a;
Aaa(int x, int y);
virtual ~Aaa();
};
#endif /* AAA_H_ */
file Aaa.cpp
/*
* Aaa.cpp
*
* Created on: Feb 28, 2015
* Author: yuewang
*/
#include "Aaa.h"
#include <iostream>
using namespace std;
Aaa::Aaa(int x, int y):a(x),b(y),c(a+b) {
// TODO Auto-generated constructor stub
}
Aaa::~Aaa() {
// TODO Auto-generated destructor stub
}
int main()
{
Aaa a(1,2);
cout<<"a="<<a.a<<endl;
cout<<"b="<<a.b<<endl;
cout<<"c="<<a.c<<endl;
}
一般都会以为输出
a=1
b=2
c=3
实际上输出是
a=1
b=2
c=0
原因是 初始化的次序是按照声明的次序来的,即c, b, a,
c引用到a和b,其时a和b的值还没有初始化。 所以c就给初值为0.