#include<iostream.h> class A { const int a; int b; }; void main() { A obja; }
编译出现如下错误:error C2512: 'A' : no appropriate default constructor available;
如果将const去掉就没错了!
#include<iostream.h> class A { public: const int a; int b; A(int x):a(x){} }; void main() { A obja(2); cout<<obja.a<<endl; cout<<obja.b<<endl;//不会自动初始化的 }
构造函数的初始化方式有两种方式
1》在构造函数的体内用赋值语句的方式。
2》用构造函数初始化列表的方式。
需要注意的是,初始化列表的执行先于构造函数体的执行。并且,一些特殊成员,比如常量成员和引用成员,都必须在初始化列表中进行初始化。
这就说明了一旦一个类中有const成员或者引用成员,这就不能使用缺省的构造函数。必须使用用户自定义的构造函数进行初始化;而且使用表达式的方式进行初始化。
#include<iostream.h> class A { public: int &a; int b;
//a是b的引用 A():b(9),a(b){}//引用和const成员一样,必须使用这种形式。 }; void main() { A obja; cout<<obja.a<<endl; }
#include<iostream.h> class A { public: const int a; A(int x):a(x){} }; class B:public A{ public: B(int x):A(x){} }; void main() { A obja(2); B objb(3); cout<<obja.a<<endl; cout<<objb.a<<endl; }