<span style="font-family: Arial, Helvetica, sans-serif;">#include<iostream></span>
using namespace std;
class A
{
private:
int b;
int a;
public:
//A():a(0),b(a+2){};
A();
void print();
};
A::A()
{
a=0;
b=a+2;
}
void A::print()
{
cout<<"a:"<<a<<" b:"<<b<<endl;
}
int main()
{
A a;
a.print();
}
#include<iostream>
using namespace std;
class A
{
private:
int b;
int a;
public:
//A():a(0),b(a+2){};
A();
void print();
};
A::A()
{
b=a+2;
a=0;
}
void A::print()
{
cout<<"a:"<<a<<" b:"<<b<<endl;
}
int main()
{
A a;
a.print();
}
两份代码只是A的构造函数不一样,我们发现构造函数中类的数据成员定义的先后顺序影响着程序结构。具体表现为:先定义的数据成员先被初始化。以上两份代码是通过构造函数初始化数据成员,若通过初始化列表的方法进行初始化,其效果与构造函数初始化的方法相同,可修改程序自行检验。
注意:
1、只有静态常量的整型数据成员才可以在定义的时候进行初始化;
class A
{
public:
.......
private:
const int a=2;//错误
static int b=6;//错误
const static int k=10;//正确
const static float r=10.3;//错误
}
2、静态变量采用类外定义初始化
int A::b=6;
3、常量变量采用初始化列表的方法
A::A():a(2){};
4、静态变量的初始化顺序为:先基类静态,后派生类静态。此期间,静态变量与全局变量的初始化部分先后。
参考:
[1]http://blog.sina.com.cn/s/blog_643254c10100q5cr.html
[2]http://www.cnblogs.com/lidabo/p/3790606.html