读书人

构造函数初始化有关问题

发布时间: 2013-03-12 11:19:35 作者: rapoo

构造函数初始化问题?

Class base
{
protected:
int i;
public:
base(int x)(i=x;}
};

class derived: public base
{
private:
int i;
public:
derived(int x,int y): base(x){} //问题在这里

void printTotal(){
int total = i+base::i;

}


}


问题是:
在derived(int x,int y): base(x){} 这一行并没有对derived类的成员变量i初始化,在VS2010上竟然编译通过了,请问这是怎么回事。我知道正确的写法应该是:
derived(int x,int y): base(x){i=y;}


但是在derived(int x,int y): base(x){} 竟然也能编译通过,请问这是为什么?
[解决办法]
也没有语法错误,编译通过不正常吗?
[解决办法]

Class base
{
protected:
int i;
public:
base(int x) : i(x) (}
};

class derived: public base
{
private:
int i;
public:
derived(int x,int y): base(x), i(y) {}

void printTotal()
{
int total = i+base::i;
}
}


初始化和赋值不一样!!
[解决办法]
语法上并没有任何问题,初始化是程序员的事情,不是编译器要做的。
[解决办法]
你选择了再构造函数内不对某个成员变量进行初始化,编译器不会阻止你这样做也没理由阻止

读书人网 >C++

热点推荐