关于构造函数初始化列表的问题。
请问用参数初始化表People(int n,int s,int a):name(n),sex(s),age(a){}和用People(int n,int s,int a)
{
name=n;
sex=s;
age=a;
}
这两种初始化方式有什么区别呢?我在写程序的时候当People是派生类,name是它基类的公有变量的时候,用公有继承,为什么用第一种方式初始化就不行,提示name没有定义。而第二种就可以呢?谢谢大家!!!
constructor 运行的时候先执行括号外的初始化,然后运行基类的constructor,然后才进入People的constructor。如果所有变量的初始化都写在函数体之前,那么这时候基类的constructor还没有运行,所以name还没有被定义,所以编译就不过(VC6)。把变量写在constrcutor函数体外面是好习惯。比较好的写法是这样:
class Base
{
public:
Base(int n);
int name;
};
class People
{
public:
People(int n, int s, int a);
}
Base::Base(int n) : name(n)
{
}
People::People(int n,int s,int a):Base(n),sex(s),age(a)
{
}