C++this指针是否可省略分析

问题引出:

我定义了一个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;

}


猜你喜欢

转载自blog.csdn.net/zangyongcan/article/details/52506342
今日推荐