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