C++類的返回值是*this的成員函數(shù)問題
C++類返回值是*this成員函數(shù)
當(dāng)C++類的成員函數(shù)其返回值是*this時(shí),表示返回值是調(diào)用該成員函數(shù)的變量的引用。
例如:
class A
{
public:
? A& func1() {
? return *this;
? }
? int i{0};
}此時(shí),類A的成員函數(shù)func1的返回值是*this,該成員函數(shù)的返回值類型是A&。
1 返回值是左值
func1()函數(shù)的返回值是類型A的引用,該返回值是左值。也就是說,此時(shí)返回的是調(diào)用該函數(shù)的對象本身,通過該返回值可以調(diào)用該對象的其他成員函數(shù)或者對其他成員變量進(jìn)行賦值。
A a; a.func1().i = 10;
此時(shí)類A的對象a的成員變量i的值是10。
2 const成員函數(shù)的返回值
在const成員函數(shù)中,不能修改對象的成員變量。當(dāng)const成員函數(shù)返回值是*this時(shí),表示返回的是一個(gè)const對象的引用。
const A& func2()const {
? return *this;
}其中,func2()函數(shù)是類A的const成員函數(shù),該函數(shù)的返回值類型是const A&,而不是A&。此時(shí),如果通過func2()函數(shù)的返回值修改對象的成員變量
a.func2().i = 100;
此時(shí)的報(bào)錯(cuò)信息為“error C3892: “a”: 不能給常量賦值”。
對C++類成員返回語句return *this的理解
經(jīng)常會(huì)在類似 copy-assignment 的成員函數(shù)看到返回語句 return *this ,這類函數(shù)通常返回類型是所屬類的引用。
類成員函數(shù)的隱式指針 class *this const 經(jīng)過 *this的解引用后成為此對象本身。此時(shí)若成員函數(shù)返回類型是 class ,那么返回的將是 this 指向的對象實(shí)體的拷貝;
若返回類型是 class& ,那么將返回一個(gè)綁定在 this 指向的對象實(shí)體上的引用。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Qt 信號自定義槽函數(shù)的實(shí)現(xiàn)
Qt中實(shí)現(xiàn)自定義信號與槽函數(shù),信號用于發(fā)送并觸發(fā)槽函數(shù),槽函數(shù)則是具體的功能實(shí)現(xiàn),本文就詳細(xì)的介紹一下如何使用,感興趣的可以了解一下2021-11-11
C#委托所蘊(yùn)含的函數(shù)指針概念詳細(xì)解析
C#中用委托這種概念實(shí)現(xiàn)了函數(shù)指針技術(shù)而已,另外.ent提供額外的安全性,當(dāng)然也損失了靈活性2013-09-09
C++實(shí)現(xiàn)團(tuán)購訂單管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了如何利用C++實(shí)現(xiàn)團(tuán)購訂單管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-12-12
C++類模板實(shí)戰(zhàn)之vector容器的實(shí)現(xiàn)
本文我們將做一個(gè)類模板實(shí)戰(zhàn)-手寫精簡版vector容器。讓我們自己封裝一個(gè)數(shù)組類,可以適應(yīng)基本數(shù)據(jù)類型和自定義數(shù)據(jù)類型,感興趣的可以了解一下2022-07-07
數(shù)據(jù)結(jié)構(gòu)之矩陣行列和相等的實(shí)例
這篇文章主要介紹了數(shù)據(jù)結(jié)構(gòu)之矩陣行列和相等的實(shí)例的相關(guān)資料,希望通過本文能幫助到大家,讓大家掌握這部分內(nèi)容,需要的朋友可以參考下2017-10-10

