日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

《C++面向对象高效编程(第2版)》——2.16 识别成员函数的目标对象

發布時間:2025/5/22 174 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《C++面向对象高效编程(第2版)》——2.16 识别成员函数的目标对象 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本節書摘來自異步社區出版社《C++面向對象高效編程(第2版)》一書中的第2章,第2.26節,作者: 【美】Kayshav Dattatri,更多章節內容可以訪問云棲社區“異步社區”公眾號查看。

2.16 識別成員函數的目標對象

C++面向對象高效編程(第2版)
在編寫成員函數(構造函數、析構函數、操作符等)的代碼時,如何顯式表示調用該成員函數的對象?或者,如果需要,如何顯式返回目標對象(target object)的值?在成員函數內部,如何訪問調用該成員函數的對象中的數據成員?

這就是this指針發揮作用的地方。類的每個成員函數都有一個特殊的指針——this。這個this指針內含調用成員函數的對象的地址(即this指針總是指向目標對象)。this指針只在成員函數內部有效,this是C++中的關鍵字。

this指針的類型是“指向成員函數所屬類的指針”,也可以說“this的類型是類名”。在成員函數內部,this指針指向調用該成員函數的類實例。

編譯器對待成員函數并沒有什么特別。實際上,編譯器就像實現普通函數那樣實現成員函數,但是,它會專門對成員函數進行名稱重整(name mangling)以確保其唯一性。每個成員函數接受的第一個參數就是this指針。盡管程序員從未顯式聲明this指針,但是它一定存在。this指針通常是每個(非靜態)成員函數隱含的第一個參數,編譯器在每個成員函數的聲明中都會插入這個隱含的參數。為了說明這個概念,顯式聲明this指針如下,Print()成員函數應是:

void TInt::Print(const TInt* this) {cout << "0x" << _mostSignificantPart << ",0x" << _leastSignificantPart; }``` 實際上,this指針的聲明在已重整函數名(mangled function name)中可見。因此,TInt::Print應該是:

void Print_3TIntFv(const TInt* this)
{
  cout << "0x" << this->_mostSignificantPart << ", 0x" <<
          this->_leastSignificantPart;
}`
一旦離開成員函數,this名稱將不再有效。

hand是否一定要使用this指針來引用目標對象中的成員?

不是所有情況都需要這樣做。只有在成員函數使用該類成員(數據成員或成員函數)的非限定(unqualified name)名時,才意味著使用this指針。如果在成員函數內部引用類的成員,編譯器會在每條表達式中均插入this指針(如果用戶沒有這樣做)。回顧Print()函數,可以這樣改寫:

void TInt::Print() {cout << "0x" << this->_mostSignificantPart << ", 0x" <<_leastSignificantPart; }``` `this- >_mostSignificantPart`表達式使用this指針顯式訪問數據成員_`mostSignificantPart`。`this- >_mostSignificantPart`表達式的意思是:this指針指向該對象中的 `_mostSignificantPart`數據成員。this指針只是成員函數的一個參數(但存在一些限制,將在其他地方討論),可以像使用成員函數的其他參數那樣使用this指針。甚至在2.15節的Print()實現中(沒有顯式使用this指針引用成員),編譯器也會將`_mostSignificantPart`表達式自動展開為`this- >_mostSignificantPart`表達式。在如下代碼段中,

TInt aInt;
aInt.Print();`
對象aInt調用Print()(即向對象aInt發送Print()消息)。在Print()函數中this指針將指向aInt。

由于this是指向對象的指針,因此,如果要使用this指針獲得整個對象,我們必須使用操作符對this指針解引用(de-reference)為*this。正如其他指針那樣,this內部存放的是對象的地址,this則是該對象的值。

this指針的概念非C++獨享。OOP語言在涉及接收消息的對象時,使用不同的名稱。如Smalltalk稱為Self,Eiffel稱之為Current。

C++:

現在,把我們的注意力轉到TInt類的一些操作符函數上。

 // +操作符的實現 TInt TInt::operator+(const TInt& operand) const// TInt 是該操作符函數的返回類型 {/*用于計算操作數和TInt數之和的代碼,TInt數調用+操作符函數,this指針指向TInt 數。該函數計算*this和操作數之和,并將計算結果以新的TInt數返回,未修改*this或操作數(因此用const限定符)。算法如下:1.加上 _leastSignificantPart部分并保存進位位元(carry bit)2.使用進位位元加上 _mostSignificantPart部分3.把(1)和(2)儲存在臨時TInt數中4.按值方式返回臨時TInt數*/TInt result = *this; // ① 調用復制構造函數unsigned char carry = 0;// 加上 _leastSignificant部分并檢查進位result._leastSignificantPart += operand.GetLeastSignificantPart();if ( result._leastSignificantPart < operand.GetLeastSignificantPart() )carry = 1;// 帶進位加上 _mostSignificantresult._mostSignificantPart += carry + operand.GetMostSignificantPart();return (result); }// 構造函數的框架TInt::TInt(long msp, unsigned long lsp){// 將傳遞給構造函數的值復制至相應的數據成員中 _leastSignificantPart = lsp;_mostSignificantPart = msp; }``` 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的《C++面向对象高效编程(第2版)》——2.16 识别成员函数的目标对象的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 精品一区二区电影 | 神马伦理视频 | 国自产拍偷拍精品啪啪一区二区 | 欧美精品一区在线发布 | 色噜噜一区二区 | av青青草| 日本一区二区人妻 | 麻豆av电影在线 | 九热在线| 亚洲一二三区在线观看 | 麻豆国产精品 | 丁香婷婷久久久综合精品国产 | 国产男女激情 | 蜜桃精品视频在线 | 欧美草逼网| 又黄又骚又爽 | 国产欧美日韩视频在线观看 | 鲁啊鲁在线视频 | 2021狠狠干 | 91九色国产| aaa国产视频| av加勒比| 大胸美女啪啪 | 欧美黄色性视频 | 亚洲最大福利 | 欧美zozo| 极品尤物一区二区三区 | 亚洲人人爱 | 欧美日韩成人免费观看 | 日本理论片午伦夜理片在线观看 | 美女喷液视频 | 青草草在线视频 | 国产啊v在线 | 黄色av电影网址 | 色哟哟免费在线观看 | 精品人妻少妇嫩草av无码 | 欧美第一网站 | 国产一区二区三区影院 | 十大污视频 | a片在线免费观看 | 欧美日韩精品一区二区三区四区 | 国产无套粉嫩白浆内谢 | 国模精品视频 | 日韩精品片 | 午夜污污 | 91蜜臀精品国产自偷在线 | 欧美日韩在线播放三区四区 | 亚洲国产精品久久久久婷蜜芽 | 91亚洲精品久久久久久久久久久久 | 国产粉嫩呻吟一区二区三区 | 天干夜天干天天天爽视频 | 久久亚洲免费视频 | 一个人看的www日本高清视频 | 四虎精品一区二区三区 | 欧美精品久久久久久久久老牛影院 | 五月天婷婷视频 | 国产嫩草在线观看 | mdyd—856冲田杏梨在线 | 久久国产精品波多野结衣av | 国产视频一区二区三区在线观看 | 欧美精品一区在线发布 | 麻豆影音| 红桃视频91 | 国产白嫩美女无套久久 | 在线伊人网 | 99精品小视频 | 欧美卡一卡二卡三 | 91久久人澡人人添人人爽欧美 | julia一区 | www.国产在线视频 | 99热成人 | 超碰在线国产 | 欧美91精品久久久久国产性生爱 | 亚洲色图在线观看 | 麻豆av在线免费观看 | 一区二区三区四区欧美 | 蜜臀aⅴ国产精品久久久国产老师 | 一区二区三区国产精品视频 | 四虎影裤 | 男人久久久| 69xav| 亚洲视频自拍偷拍 | 喷水av | 森泽佳奈av | 20日本xxxxxxxxx46 欧美激情一级 | 国产黄大片在线观看画质优化 | 肉色超薄丝袜脚交一区二区 | 精品国产亚洲av麻豆 | 一起草在线视频 | 李宗瑞91在线正在播放 | 久久久久久久久久久久久久久久久久久 | 又大又长粗又爽又黄少妇视频 | 三级一区二区 | 国产a网| 国产精品久久婷婷六月丁香 | 中文字幕一区二区三区精品 | 一级欧美日韩 | 午夜看毛片 | 成人性生交大片免费看中文 |