C++類(lèi)的返回值是*this的成員函數(shù)問(wèn)題
C++類(lèi)返回值是*this成員函數(shù)
當(dāng)C++類(lèi)的成員函數(shù)其返回值是*this時(shí),表示返回值是調(diào)用該成員函數(shù)的變量的引用。
例如:
class A
{
public:
? A& func1() {
? return *this;
? }
? int i{0};
}此時(shí),類(lèi)A的成員函數(shù)func1的返回值是*this,該成員函數(shù)的返回值類(lèi)型是A&。
1 返回值是左值
func1()函數(shù)的返回值是類(lèi)型A的引用,該返回值是左值。也就是說(shuō),此時(shí)返回的是調(diào)用該函數(shù)的對(duì)象本身,通過(guò)該返回值可以調(diào)用該對(duì)象的其他成員函數(shù)或者對(duì)其他成員變量進(jìn)行賦值。
A a; a.func1().i = 10;
此時(shí)類(lèi)A的對(duì)象a的成員變量i的值是10。
2 const成員函數(shù)的返回值
在const成員函數(shù)中,不能修改對(duì)象的成員變量。當(dāng)const成員函數(shù)返回值是*this時(shí),表示返回的是一個(gè)const對(duì)象的引用。
const A& func2()const {
? return *this;
}其中,func2()函數(shù)是類(lèi)A的const成員函數(shù),該函數(shù)的返回值類(lèi)型是const A&,而不是A&。此時(shí),如果通過(guò)func2()函數(shù)的返回值修改對(duì)象的成員變量
a.func2().i = 100;
此時(shí)的報(bào)錯(cuò)信息為“error C3892: “a”: 不能給常量賦值”。
對(duì)C++類(lèi)成員返回語(yǔ)句return *this的理解
經(jīng)常會(huì)在類(lèi)似 copy-assignment 的成員函數(shù)看到返回語(yǔ)句 return *this ,這類(lèi)函數(shù)通常返回類(lèi)型是所屬類(lèi)的引用。
類(lèi)成員函數(shù)的隱式指針 class *this const 經(jīng)過(guò) *this的解引用后成為此對(duì)象本身。此時(shí)若成員函數(shù)返回類(lèi)型是 class ,那么返回的將是 this 指向的對(duì)象實(shí)體的拷貝;
若返回類(lèi)型是 class& ,那么將返回一個(gè)綁定在 this 指向的對(duì)象實(shí)體上的引用。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
利用C/C++二進(jìn)制讀寫(xiě)png文件的方法示例
最近在做項(xiàng)目的時(shí)候遇到了這個(gè)問(wèn)題,所以想著總結(jié)下,方法自己和有需要的朋友,下面這篇文章主要介紹了利用C/C++二進(jìn)制讀寫(xiě)png文件的方法,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2016-12-12
Qt 信號(hào)自定義槽函數(shù)的實(shí)現(xiàn)
Qt中實(shí)現(xiàn)自定義信號(hào)與槽函數(shù),信號(hào)用于發(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)購(gòu)訂單管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了如何利用C++實(shí)現(xiàn)團(tuán)購(gòu)訂單管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-12-12
C++類(lèi)模板實(shí)戰(zhàn)之vector容器的實(shí)現(xiàn)
本文我們將做一個(gè)類(lèi)模板實(shí)戰(zhàn)-手寫(xiě)精簡(jiǎn)版vector容器。讓我們自己封裝一個(gè)數(shù)組類(lèi),可以適應(yīng)基本數(shù)據(jù)類(lèi)型和自定義數(shù)據(jù)類(lèi)型,感興趣的可以了解一下2022-07-07
數(shù)據(jù)結(jié)構(gòu)之矩陣行列和相等的實(shí)例
這篇文章主要介紹了數(shù)據(jù)結(jié)構(gòu)之矩陣行列和相等的實(shí)例的相關(guān)資料,希望通過(guò)本文能幫助到大家,讓大家掌握這部分內(nèi)容,需要的朋友可以參考下2017-10-10
C++深入分析講解函數(shù)與重載知識(shí)點(diǎn)
C++?允許多個(gè)函數(shù)擁有相同的名字,只要它們的參數(shù)列表不同就可以,這就是函數(shù)的重載(Function?Overloading),借助重載,一個(gè)函數(shù)名可以有多種用途2022-06-06
C語(yǔ)言編程PAT乙級(jí)學(xué)習(xí)筆記示例分享
這篇文章主要為大家介紹了C語(yǔ)言編程PAT乙級(jí)學(xué)習(xí)筆記實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05

