问题引出:
我定义了一个Fraction类,
class Fraction
{
public:
Fraction(int num, int den);
~Fraction();
void Set(int num, int den);
private:
int num, den;
};
在构造函数初始化时,形参列表中的参数和类Fraction的私有变量名称一样,有以下两种
方式进行构造函数初始化:
(1)
Fraction::Fraction(int num, int den)
{this->num = num;
this->den = den;
cout<<"构造函数"<<endl;
}
(2)
Fraction::Fraction(int num, int den):num(num),den(den)
{
cout<<"构造函数"<<endl;
}
采用第二种方式,利用初始化列表,即使形参列表中的参数和类Fraction的私有变量名称一样,也可以完成初始化;
但是,采用第一种方式时,若形参列表中的参数和类Fraction的私有变量名称一样时,this指针一定不能省略。即方式(3)
不能完成初始化。一定是C++编译器对初始化列表方式中的括号作了特殊处理。
(3)
Fraction::Fraction(int num, int den)
{num = num;
den = den;
cout<<"构造函数"<<endl;
}
针对成员函数也是一样,即
void Fraction::Set(int num, int den)
{
this->num = num;
this->den = den;
}
中的this指针不可省略。
如果形参列表中的参数和类Fraction的私有变量名称不一样,则可以省略this指针,如:
Fraction::Fraction(int n, int d)
{num = n;
den = d;
cout<<"构造函数"<<endl;
}