C++this指標是否可省略分析
阿新 • • 發佈:2019-02-10
問題引出:
我定義了一個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;
}