C++this指針詳情
還是Stock股票這個類,假設(shè)我們要實(shí)現(xiàn)一個方法,比較一下當(dāng)前股票和傳入的股票, 返回價格高的那個股票。在我們實(shí)現(xiàn)的時候,會遇到一點(diǎn)問題。
const Stock & Stock::topVal(const Stock &s) const {
? ? if (s.total_val > total_val) {
? ? ? ? return s;
? ? }else {
? ? ? ? return ????;
? ? }
}這段代碼當(dāng)中有一些問題,我們一個一個來說。
首先說函數(shù)簽名,前面都沒有問題,問題出現(xiàn)在簽名末尾的const。這是我們第一次在函數(shù)的末尾看到const,這個用法只能用在類或結(jié)構(gòu)體的成員函數(shù)中,而不能用在普通函數(shù)里。
它表示這個函數(shù)不會修改任何成員變量的值,末尾加上const的函數(shù)稱為常量成員函數(shù)。
常量函數(shù)有一些特殊的性質(zhì):
能被任何函數(shù)調(diào)用,只能調(diào)用常量函數(shù)
能被任何對象調(diào)用,但const對象只能調(diào)用const函數(shù)
性質(zhì)不是非常復(fù)雜,但有些像是繞口令,需要從const常量的性質(zhì)角度出發(fā)理解一下。
代碼當(dāng)中第二個問題就是一堆問號的地方,這里我們想要return當(dāng)前對象,但是我們不知道如何表示。為了解決這個問題,C++當(dāng)中創(chuàng)建了一個特殊的指針叫做this,它用來指向調(diào)用成員函數(shù)的對象,也就是當(dāng)前對象。
所以有了this之后,這段代碼可以寫成:
const Stock & Stock::topVal(const Stock &s) const {
? ? if (s.total_val > total_val) {
? ? ? ? return s;
? ? }else {
? ? ? ? return *this
? ? }
}另外,this指針也可以拿來訪問當(dāng)前對象當(dāng)中的成員變量,比如我們想要訪問當(dāng)前的total_val,可以寫成this->total_val,我們直接用total_val本質(zhì)上是一樣的,是編譯器替我們做了優(yōu)化。
到此這篇關(guān)于C++this指針詳情的文章就介紹到這了,更多相關(guān)C++this指針內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
淺談CMake配置OpenCV 時靜態(tài)鏈接與動態(tài)鏈接的選擇
下面小編就為大家?guī)硪黄獪\談CMake配置OpenCV 時靜態(tài)鏈接與動態(tài)鏈接的選擇。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-01-01
OpenCV中C++函數(shù)imread讀取圖片的問題及解決方法
利用C++函數(shù)imread讀取圖片的時候返回的結(jié)果總是空,而利用C函數(shù)cvLoadImage時卻能讀取到圖像。怎么回事?今天小編通過本教程給大家簡單說明原因2017-03-03
C語言實(shí)現(xiàn)簡單停車場管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)簡單停車場管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-12-12

