C++----this指標
阿新 • • 發佈:2018-12-14
c++通過提供特殊的物件指標,this指標,解決上述問題。This指標指向被呼叫的成員函式所屬的物件。
c++規定,this指標是隱含在物件成員函式內的一種指標。當一個物件被建立後,它的每一個成員函式都含有一個系統自動生成的隱含指標this,用以儲存這個物件的地址,也就是說雖然我們沒有寫上this指標,編譯器在編譯的時候也是會加上的。因此this也稱為“指向本物件的指標”,this指標並不是物件的一部分,不會影響sizeof(物件)的結果。
this指標是C++實現封裝的一種機制,它將物件和該物件呼叫的成員函式連線在一起,在外部看來,每一個物件都擁有自己的函式成員。一般情況下,並不寫this,而是讓系統進行預設設定。
this指標永遠指向當前物件。 |
成員函式通過this指標即可知道操作的是那個物件的資料。This指標是一種隱含指標,它隱含於每個類的非靜態成員函式中。This指標無需定義,直接使用即可。
注意:靜態成員函式內部沒有this指標,靜態成員函式不能操作非靜態成員變數。 |
//this指標: class Person1 { public: int age; Person1(int age) { age = age; } }; void test01() { Person1 p1(10); cout << "p1的年齡" << p1.age << endl; }
//輸出為 地址亂碼;
//類中的age變數名相同,沒有區分;
//區分:
class Person2
{
public:
int age;
Person2(int age)
{
this ->age = age;
}
};
//this解決命名衝突;
void test02()
{
Person2 p1(10);
cout << "p1的年齡" << p1.age << endl;
}
//此時編譯器可以區分類中的變數;
class Person3 { public: int age; Person3(int age) { this->age = age; } //年齡比較 void compareAge(Person3 &p) { if (this->age == p.age) cout << "年齡相等" << endl; else cout << "不相等" << endl; } }; void test03() { Person3 p1(10); Person3 p2(10); p1.compareAge(p2); }
//年齡相加
class Person4
{
public:
int age;
Person4(int age)
{
this->age = age;
}
//年齡比較
void compareAge(Person4 &p)
{
if (this->age == p.age)
cout << "年齡相等" << endl;
else
cout << "不相等" << endl;
}
void plusAge(Person4 & p)
{
this->age += p.age;
cout << this->age << endl;
}
};
void test04()
{
Person4 p1(10);
Person4 p2(10);
p1.plusAge(p2);
}
//鏈式程式設計返回引用:
class Person5
{
public:
int age;
Person5(int age)
{
this->age = age;
}
//年齡比較
void compareAge(Person5 &p)
{
if (this->age == p.age)
cout << "年齡相等" << endl;
else
cout << "不相等" << endl;
}
Person5& plusAge(Person5 & p)//函式返回引用可以做左值
{
this->age += p.age;
cout << this->age << endl;
return *this;//指向物件的本體;
}
};
void test05()
{
Person5 p1(10);
Person5 p2(10);
p1.plusAge(p2).plusAge(p2); //相當於連加,鏈式程式設計思想。
//所以前一個需要返回類物件的本體,即:return *this;
//this永遠指向當前物件;
}
int main()
{
test01();
test02();
test03();
test04();
test05();
return 0;
}