精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

C++基礎之類的詳細介紹(一)

開發 后端
本文介紹的是C++中的類,針對初學者而言,這是很好的教程。希望對大家有幫助,一起來看。

C++中,提到類型定義符前還可以書寫class,即類型的自定義類型(簡稱類),它和結構根本沒有區別(僅有一點小小的區別,下篇說明),而之所以還要提供一個class,實際是由于C++是從C擴展而成,其中的class是C++自己提出的一個很重要的概念,只是為了與C語言兼容而保留了struct這個關鍵字。

暫時可以先認為類較結構的長足進步就是多了成員函數這個概念(雖然結構也可以有成員函數),在了解成員函數之前,先來看一種語義需求。

操作與資源

程序主要是由操作和被操作的資源組成,操作的執行者就是CPU,這很正常,但有時候的確存在一些需要,需要表現是某個資源操作了另一個資源(暫時稱作操作者),比如游戲中,經常出現的就是要映射怪物攻擊了玩家。之所以需要操作者,一般是因為這個操作也需要修改操作者或利用操作者記錄的一些信息來完成操作,比如怪物的攻擊力來決定玩家被攻擊后的狀態。這種語義就表現為操作者具有某些功能。為了實現上面的語義,如原來所說進行映射,先映射怪物和玩家分別為結構,如下:

 

  1. struct Monster { float Life; float Attack; float Defend; };  
  2. struct Player { float Life; float Attack; float Defend; }; 

 

上面的攻擊操作就可以映射為void MonsterAttackPlayer( Monster &mon, Player &pla );。注意這里期望通過函數名來表現操作者,但和前篇說的將過河方案起名為sln一樣,屬于一種本末倒置,因為這個語義應該由類型來表現,而不是函數名。為此,C++提供了成員函數的概念。

成員函數

與之前一樣,在類型定義符中書寫函數的聲明語句將定義出成員函數,如下:

 

  1. struct ABC { long a; void AB( long ); }; 

 

上面就定義了一個映射元素——第一個變量ABC::a,類型為long ABC::;以及聲明了一個映射元素——第二個函數ABC::AB,類型為void ( ABC:: )( long )。類型修飾符ABC::在此修飾了函數ABC::AB,表示其為函數類型的偏移類型,即是一相對值。但由于是函數,意義和變量不同,即其依舊映射的是內存中的地址(代碼的地址),但由于是偏移類型,也就是相對的,即是不完整的,因此不能對它應用函數操作符,如:

  1. ABC::AB( 10 ); 

 

這里將錯誤,因為ABC::AB是相對的,其相對的東西不是如成員變量那樣是個內存地址,而是一個結構指針類型的參數,參數名一定為this,這是強行定義的,后面說明。

注意由于其名字為ABC::AB,而上面僅僅是對其進行了聲明,要定義它,仍和之前的函數定義一樣,如下:

 

  1. void ABC::AB( long d ) { this->a = d; } 

 

應注意上面函數的名字為ABC::AB,但和前篇說的成員變量一樣,不能直接書寫long ABC::a;,也就不能直接如上書寫函數的定義語句(至少函數名為ABC::AB就不符合標識符規則),而必須要通過類型定義符“{}”先定義自定義類型,然后再書寫,這會在后面說明聲明時詳細闡述。

注意上面使用了this這個關鍵字,其類型為ABC*,由編譯器自動生成,即上面的函數定義實際等同于

  1. void ABC::AB( ABC *thislong d ) { this->a = d; } 

 

而之所以要省略this參數的聲明而由編譯器來代勞是為了在代碼上體現出前面提到的語義(即成員的意義),這也是為什么稱ABC::AB是函數類型的偏移類型,它是相對于這個this參數而言的,如何相對,如下:

  1. ABC a, b, c;   
  2. a.ABC::AB( 10 );   
  3. b.ABC::AB( 12 );   
  4. c.AB( 14 ); 

 

上面利用成員操作符調用ABC::AB,注意執行后,a.a、b.a和c.a的值分別為10、12和14,即三次調用ABC::AB,但通過成員操作符而導致三次的this參數的值并不相同,并進而得以修改三個ABC變量的成員變量a。注意上面書寫

  1. a.ABC::AB( 10 ); 

 

和成員變量一樣,由于左右類型必須對應,因此也可

  1. a.AB( 10 ); 

 

還應注意上面在定義ABC::AB時,在函數體內書寫

  1. this->a = d; 

 

同上,由于類型必須對應的關系,即this必須是相應自定義類型的指針,所以也可省略this->的書寫,進而有

  1. void ABC::AB( long d ) { a = d; } 

 

注意這里成員操作符的作用,其不再如成員變量時返回相應成員變量類型的數字,而是返回一函數類型的數字,但不同的就是這個函數類型是無法用語法表示出來的,即C++并沒有提供任何關鍵字或類型修飾符來表現這個返回的類型(VC內部提供了__thiscall這個類型修飾符進行表示,不過寫代碼時依舊不能使用,只是編譯器內部使用)。

也就是說,當成員操作符右側接的是函數類型的偏移類型的數字時,返回一個函數類型的數字(表示其可被施以函數操作符),函數的類型為偏移類型中給出的類型,但這個類型無法表現。即a.AB將返回一個數字,這個數字是函數類型,在VC內部其類型為void ( __thiscall ABC:: )( long ),但這個類型在C++中是非法的。

C++并沒有提供類似__thiscall這樣的關鍵字以修飾類型,因為這個類型是要求編譯器遇到函數操作符和成員操作符時,如

  1. a.AB( 10 ); 

 

要將成員操作符左側的地址作為函數調用的第一個參數傳進去,然后再傳函數操作符中給出的其余各參數。即這個類型是針對同時出現函數操作符和成員操作符這一特定情況,給編譯器提供一些信息以生成正確的代碼,而不用于修飾數字(修飾數字就要求能應付所有情況)。即類型是用于修飾數字的,而這個類型不能修飾數字,因此C++并未提供類似__thiscall的關鍵字。

和之前一樣,由于ABC::AB映射的是一個地址,而不是一個偏移值,因此可以

  1. ABC::AB; 

 

但不能

  1. ABC::a; 

 

因為后者是偏移值。根據類型匹配,很容易就知道也可有:

 

  1. void ( ABC::*p )( long ) = ABC::AB;  
  2. 或  
  3. void ( ABC::*p )( long ) = &ABC::AB; 

 

進而就有:

  1. void ( ABC::**pP )( long ) = &p; ( c.**pP )( 10.0f ); 

 

之所以加括號是因為函數操作符的優先級較“*”高。再回想前篇說過指針類型的轉換只是類型變化,數值不變(下篇說明數值變化的情況),因此可以有如下代碼,這段代碼毫無意義,在此僅為加深對成員函數的理解。

 

  1. struct ABC { long a; void AB( long ); };  
  2. void ABC::AB( long d )  
  3. {  
  4.   this->a = d;  
  5. }  
  6. struct AB  
  7. {  
  8.   short a, b;  
  9.   void ABCD( short tem1, short tem2 );  
  10.   void ABC( long tem );  
  11. };  
  12. void AB::ABCD( short tem1, short tem2 )  
  13. {  
  14.   a = tem1; b = tem2;  
  15. }  
  16. void AB::ABC( long tem )  
  17. {  
  18.   a = short( tem / 10 );  
  19.   b = short( tem - tem / 10 );  
  20. }  
  21. void main()  
  22. {  
  23.   ABC a, b, c; AB d;  
  24.   ( c.*( void ( ABC::* )( long ) )&AB::ABC )( 43 );  
  25.   ( b.*( void ( ABC::* )( long ) )&AB::ABCD )( 0XABCDEF12 );  
  26.   ( d.*( void ( AB::* )( shortshort ) )ABC::AB )( 0XABCD, 0XEF12 );  

 

上面執行后,c.a為0X00270004,b.a為0X0000EF12,d.a為0XABCD,d.b為0XFFFF。對于c的函數調用,由于 AB::ABC映射的地址被直接轉換類型進而直接被使用,因此程序將跳到AB::ABC處的

  1. a = short( tem / 10 ); 

 

開始執行,而參數tem映射的是傳遞參數的內存的首地址,并進而用long類型解釋而得到tem為43,然后執行。

注意

  1. b = short( tem - tem / 10 ); 

 

實際是

  1. this->b = short( tem - tem / 10 ); 

 

而this的值為c對應的地址,但在這里被認為是AB*類型(因為在函數AB::ABC的函數體內),所以才能this->b正常(ABC結構中沒有b這個成員變量),而b的偏移為2,所以上句執行完后將結果39存放到c的地址加2所對應的內存,并且以short類型解釋而得到的16位的二進制數存放。

對于

  1. a = short( tem / 10 ); 

 

也做同樣事情,故最后得c.a的值為0X0027004(十進制39轉成十六進制為0X27)。

同樣,對于b的調用,程序將跳到AB::ABCD,但生成的b的調用代碼時,將參數0XABCDEF12按照參數類型為long的格式記錄在傳遞參數的內存中,然后跳到AB::ABCD。但編譯AB::ABCD時又按照參數為兩個short類型來映射參數tem1和tem2對應的地址,因此容易想到 tem1的值將為0XEF12,tem2的值為0XABCD,但實際并非如此。

下一篇>>

責任編輯:于鐵 來源: 互聯網
相關推薦

2011-07-14 16:56:21

2011-07-14 17:02:09

C++指針

2011-07-14 23:27:05

C++引用

2011-06-21 10:37:56

const

2011-07-14 17:17:21

C++指針

2011-07-20 13:57:06

C++STL

2011-07-20 15:58:53

C++引用

2011-07-13 16:49:59

C++

2011-07-20 13:57:06

C++STL

2011-07-15 10:08:11

C++運算符重載

2023-12-18 11:15:03

2011-07-20 16:43:34

C++

2011-07-20 14:12:48

2010-01-19 13:17:05

C++數據類型

2011-06-21 15:00:07

JAVAC++

2011-07-13 11:12:43

C++MFC

2010-01-11 09:56:07

C++編程實例

2011-07-20 17:16:50

C++重載函數

2020-09-28 08:12:59

CC++時間

2009-08-13 15:40:28

C#基礎知識
點贊
收藏

51CTO技術棧公眾號

91麻豆精品国产91久久久久久| 成人免费毛片app| 这里精品视频免费| 九一精品久久久| 在线中文字幕-区二区三区四区| 韩国午夜理伦三级不卡影院| 欧美日韩国产成人| av在线网站观看| 精品乱码一区二区三区四区| 亚洲欧洲国产日韩| 国语精品中文字幕| 精品国产www| 97精品国产| 精品欧美乱码久久久久久| 日本三区在线观看| 在线电影福利片| 久久久久久99久久久精品网站| 成人久久久久久久| 91看片在线播放| 日韩在线二区| 亚洲福利视频网| 欧美成人三级在线播放| 成av人片在线观看www| 国产精品嫩草99a| 精品欧美一区二区久久久伦| 亚洲在线免费观看视频| 亚洲欧美不卡| 欧美激情精品久久久久久免费印度| 国产熟妇搡bbbb搡bbbb| 午夜免费欧美电影| 欧美亚洲图片小说| 18禁免费观看网站| 99自拍视频在线观看| 欧美极品少妇xxxxⅹ高跟鞋 | 欲香欲色天天天综合和网| 一区在线观看视频| 先锋影音亚洲资源| 日韩在线观看视频网站| 国产在线播放一区| 国产精品午夜国产小视频| 青青草av在线播放| 欧美午夜不卡| 久久精品中文字幕一区| 懂色av蜜桃av| 久久91麻豆精品一区| 亚洲国产精品久久久久秋霞蜜臀| 国产亚洲色婷婷久久| 久久久久久一区二区三区四区别墅| 91cn在线观看| 国产成人自拍高清视频在线免费播放| 国产精品视频免费在线观看| 四虎影院在线免费播放| 国产手机视频一区二区| 97在线视频一区| 五月天综合在线| 最新成人av网站| 国内精品中文字幕| 国产成人无码精品久在线观看| 欧美视频在线观看| 欧美极品在线视频| 国产精彩视频在线观看| 亚洲人成免费| 欧美在线视频一区二区| 国产精品久免费的黄网站| 欧美在线综合| 国产精品九九久久久久久久| 在线观看亚洲国产| 黄色日韩网站视频| 91免费看网站| 日韩在线视频第一页| 91污在线观看| 四虎一区二区| 国产乱色在线观看| 亚洲一区二区精品视频| 日日橹狠狠爱欧美超碰| 中文字幕一区久| 精品视频一区二区三区免费| 亚洲一二三av| 国产精品高潮呻吟久久久久| 日韩精品久久久久久久玫瑰园 | 欧美激情一二三区| 中文字幕在线观看一区二区三区| 尤物在线网址| 欧美日韩中文字幕| 中文字幕一区久久| 成午夜精品一区二区三区软件| 日韩久久免费电影| 国产在视频线精品视频| 欧美日韩1区| 国产成人精品在线视频| 99久久国产免费| 99re热这里只有精品视频| 日韩成人av电影在线| 国产精品va在线观看视色| 五月天激情综合| www欧美激情| 中文在线综合| 少妇高潮久久77777| 久久久久无码国产精品不卡| 久久久久久久波多野高潮日日| 国产日韩精品在线播放| 亚洲 美腿 欧美 偷拍| 中文字幕巨乱亚洲| 日本在线xxx| 伊人久久大香伊蕉在人线观看热v| 日韩一区二区免费高清| 全黄一级裸体片| 欧美在线免费| 国产精品欧美一区二区| 午夜黄色小视频| 亚洲欧洲日产国码二区| 女性隐私黄www网站视频| 美女精品久久| 色七七影院综合| 天天干天天干天天干天天| 国产乱码精品1区2区3区| 日韩精品久久一区二区三区| av老司机在线观看| 欧美一级欧美一级在线播放| 国产激情av在线| 亚洲欧美日韩精品一区二区| 99re热精品| 免费av在线网址| 日本黄色一区二区| 91精品国产自产| 亚洲国产高清一区| 3d精品h动漫啪啪一区二区| 永久免费av在线| 日本丰满少妇一区二区三区| 成年人的黄色片| 午夜精品999| 成人午夜激情免费视频| 在线视频二区| 在线观看免费一区| 少妇真人直播免费视频| 国产精品久久久久毛片大屁完整版| 91精品网站| 91福利国产在线观看菠萝蜜| 欧美一级二级三级蜜桃| 国产人妻精品一区二区三区不卡| 麻豆免费精品视频| 亚洲一区二区三区精品在线观看 | 91久久精品国产91性色tv | 国产sm主人调教女m视频| 中文字幕在线观看一区二区| 亚洲一区在线不卡| 成人激情开心网| 国产精品一区二区3区| 91在线网址| 欧美日韩国产在线观看| 欧美色图17p| 激情久久五月天| 永久免费网站视频在线观看| 欧美精品影院| 欧美—级高清免费播放| 农村少妇久久久久久久| 五月天精品一区二区三区| 在线观看免费视频国产| 在线综合视频| 蜜桃91精品入口| 亚洲a∨精品一区二区三区导航| 亚洲一级免费视频| 中文字幕日韩国产| 综合自拍亚洲综合图不卡区| 国内精品国产三级国产aⅴ久| 欧美精品黄色| 久精品国产欧美| 日韩欧美一区二区三区免费观看 | 国产日韩欧美一区| 蜜桃免费一区二区三区| 欧美free嫩15| 久久综合亚洲社区| 亚洲av永久纯肉无码精品动漫| 亚洲一区精品在线| 日韩 中文字幕| 日韩高清在线一区| 99视频精品全部免费看| 一区二区三区亚洲变态调教大结局 | 国产福利电影在线| 5858s免费视频成人| 久久精品99国产精| 久久久久久久久久久久久久久99| 亚洲最大成人在线观看| 欧美成人69| 久久综合久久综合这里只有精品| 成人国产网站| 久久久久久久久久久成人| 免费人成在线观看网站| 5月丁香婷婷综合| 青青国产在线观看| 中文字幕一区二区不卡| 中文字幕精品视频在线| 蜜臀av性久久久久蜜臀aⅴ流畅| 男人的天堂成人| 欧美有码在线| 成人在线视频网站| 天堂√中文最新版在线| 久久精品一偷一偷国产| 水莓100国产免费av在线播放| 欧美日韩精品一区二区三区四区| 国产乱码久久久久久| 国产精品白丝在线| 人妻无码一区二区三区| 国产一区二区在线视频| 一本久道中文无码字幕av| 你懂的国产精品永久在线| 欧美日韩大片一区二区三区| 欧美电影院免费观看| 国产精品久久久久久亚洲调教| 黄污视频在线观看| 日韩视频免费中文字幕| 黑人与亚洲人色ⅹvideos| 日韩欧美一二三四区| 亚洲视频中文字幕在线观看| 欧美日韩午夜激情| 久久久久久久久99| 1024成人网色www| 手机免费看av| 91丨porny丨国产入口| 色哟哟免费视频| 久久爱www久久做| 无码少妇一区二区三区芒果| 亚洲伦伦在线| 欧美中日韩在线| 亚洲午夜精品一区 二区 三区| 日韩片电影在线免费观看| 任你躁在线精品免费| 国产精品乱码一区二区三区| 91精品国产自产观看在线| 国产精品久久一| 欧美激情喷水| 青青草原成人在线视频| 国产在线观看www| 久久久在线观看| 黄色大片在线| 久久久久久久国产精品视频| 欧美xxxx免费虐| 欧美激情图片区| 91三级在线| 九色成人免费视频| 中文字幕中文字幕在线十八区 | 久久久久性色av无码一区二区| 综合电影一区二区三区 | 日韩欧美亚洲一二三区| 亚洲日本韩国在线| 欧美日韩亚洲网| 手机看片久久久| 91国模大尺度私拍在线视频| 无码一区二区三区| 欧美亚洲国产怡红院影院| 波多野结衣视频网址| 色婷婷av一区二区三区大白胸 | 玛丽玛丽电影原版免费观看1977 | 日本欧美在线| 91精品视频网站| 一区二区视频| 国产一区二区精品免费| 日韩电影在线观看完整免费观看| 久久精品日韩| 国产一区二区三区站长工具| 色婷婷精品国产一区二区三区| 日本久久一二三四| 在线视频不卡一区二区| 欧美国产91| 成人黄色av片| 日韩av在线播放中文字幕| 污污网站免费观看| 国产91富婆露脸刺激对白| 无码任你躁久久久久久老妇| 99久久免费国产| 精品无码在线观看| 亚洲人成7777| 91蜜桃视频在线观看| 91黄视频在线观看| 国产特级aaaaaa大片| 亚洲国产精品福利| 成年人视频在线观看免费| 久久精品视频在线播放| 蜜桃视频m3u8在线观看| 国产精品人人做人人爽| 天堂va欧美ⅴa亚洲va一国产| 好看的日韩精品| 欧美一级精品片在线看| 天天想你在线观看完整版电影免费| 亚洲经典在线看| 一区二区三区免费播放| 国产精品一区二区91| 玖玖爱在线观看| 亚洲狼人国产精品| 亚洲成人av影片| 日韩一区二区三区四区| 噜噜噜噜噜在线视频| 久久伊人免费视频| 黄色成人免费网| 91精品久久久久久蜜桃| 精品国产1区| 国产 日韩 欧美在线| 裸体一区二区三区| 中文字幕 日本| 亚洲欧美日韩电影| av毛片在线免费观看| 欧美大片一区二区| 色综合久久影院| 欧美在线xxx| 日韩视频一区二区三区四区| 日韩中文字幕一区二区| 精品成人在线| 欧美精品 - 色网| 国产欧美日韩另类一区| 国产亚洲自拍av| 884aa四虎影成人精品一区| 四虎影视在线观看2413| 欧美日韩ab片| 亚洲视频资源| 天堂一区二区三区| 午夜一级久久| 亚洲色图欧美日韩| 夜夜嗨av一区二区三区中文字幕| 亚洲综合免费视频| 亚洲全黄一级网站| 成年男女免费视频网站不卡| 成人性色av| 亚洲香蕉av| 亚洲精品成人在线播放| 欧美经典一区二区三区| 激情视频网站在线观看| 亚洲精品国产精品国自产观看浪潮| 天堂av在线电影| 成人免费视频a| 99久久夜色精品国产亚洲96| 三级a在线观看| 国产亚洲综合性久久久影院| 国产微拍精品一区| 亚洲国产精品悠悠久久琪琪 | 国产精品久久久久久麻豆一区软件 | 国产视频不卡在线| 在线免费观看一区| 黄色片在线免费观看| 日韩免费观看在线观看| 女人av一区| 日韩久久一级片| 久久久久久久久伊人| 波多野结衣高清视频| 夜夜嗨av色一区二区不卡| 日韩欧美一区二区三区免费观看| 日本高清久久一区二区三区 | 久久久久久久久久久久久久久国产| 欧美国产精品一区二区三区| 国产情侣呻吟对白高潮| 在线一区二区日韩| 外国成人毛片| 男女h黄动漫啪啪无遮挡软件| 国产一区 二区 三区一级| 青草草在线视频| 亚洲精品一区二区三区影院| 美女网站视频在线| 精品高清视频| 久久综合网络一区二区| 国产视频三区四区| 欧美日韩一级二级| fc2ppv国产精品久久| 国产精品一区二区三区不卡| av成人天堂| 懂色av蜜桃av| 69久久夜色精品国产69蝌蚪网| 欧美人与牲禽动交com| 国产九色91| 久热国产精品| 国产精品视频一区二区在线观看| 日韩欧美资源站| 欧美激情网站| 亚洲午夜在线观看| 国产传媒日韩欧美成人| 91精品国产乱码久久久张津瑜 | 精品久久久久久乱码天堂| 免费亚洲婷婷| 99热99这里只有精品| 精品国产乱码久久久久久浪潮| 成人av观看| 99久久久无码国产精品性色戒| www.爱久久.com| jizz国产在线| 色综合91久久精品中文字幕| 午夜精品福利影院| www.com久久久| 激情久久av一区av二区av三区| 国产高清一区在线观看| 亚洲自拍小视频| 亚洲一区网站| 午夜爽爽爽男女免费观看| 亚洲精品动漫久久久久| 天天综合91| 免费观看精品视频| 亚洲欧美电影一区二区| 你懂的视频在线| 5g国产欧美日韩视频| 首页综合国产亚洲丝袜| 久久亚洲成人av| 在线精品视频视频中文字幕| 国产成人福利av|