1. 程式人生 > >C++this指標是否可省略分析

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;

}