精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

一区二区视频在线观看| 国产成人精品在线观看| 激情av中文字幕| 天堂av在线| 亚洲国产精品99久久久久久久久 | 丁香花在线观看完整版电影| 成人久久视频在线观看| 国产999视频| 色婷婷在线视频观看| 久久久久久毛片免费看| 欧美日免费三级在线| 99re6这里有精品热视频| 三级在线视频| 国产一区二区精品久久99| 91高清视频在线免费观看| 91无套直看片红桃在线观看| www国产精品| 欧美日韩午夜影院| 久久亚洲中文字幕无码| 日本中文字幕在线视频| 成人精品视频一区二区三区| 国产成人亚洲综合| 国产精品99精品| 日韩欧美中字| 亚洲精品美女网站| 99999精品| 成人网ww555视频免费看| 亚洲福利一区二区三区| 中文字幕精品—区二区日日骚| 日韩永久免费视频| 国产一区二区三区黄视频 | 色爱av美腿丝袜综合粉嫩av| 完美搭档在线观看| 久久精品九色| 欧美日韩亚洲丝袜制服| 99精品免费在线观看| wwww亚洲| 一区二区三区精品在线| 在线一区日本视频| 成年人在线视频免费观看| 99re成人在线| 鬼打鬼之黄金道士1992林正英| 亚洲一级片免费看| 三级精品在线观看| 亲爱的老师9免费观看全集电视剧| 私库av在线播放| 久久久久免费av| 最近2019年手机中文字幕| 天天躁日日躁aaaa视频| 天堂av一区二区三区在线播放| 欧美mv日韩mv国产网站app| 在线一区二区不卡| www.久久久久爱免| 在线播放日韩导航| 不用播放器的免费av| 国产成人精品一区二区三区视频| 欧美日韩国产中文字幕| 欧美日韩精品在线一区二区 | 日本中文字幕久久看| 国产手机在线视频| 国产欧美精品| 欧美自拍视频在线| 人妻 日韩精品 中文字幕| 国产精品一二| 日韩美女毛茸茸| 18国产免费视频| 青青国产91久久久久久| 国产精品专区h在线观看| 中文字幕人妻精品一区| 久久福利视频一区二区| 国产日韩欧美影视| 国产www免费观看| 成人性生交大合| 精品一区在线播放| 男男激情在线| 国产精品午夜免费| 一级黄色录像免费看| av网址在线播放| 亚洲丶国产丶欧美一区二区三区| 黄色国产一级视频| 欧美性xxx| 欧美日韩国产系列| 国产经品一区二区| 欧美自拍第一页| 91浏览器在线视频| 亚洲欧洲日韩精品| 在线观看男女av免费网址| 亚洲一区二区三区视频在线播放 | 日本免费色视频| 日韩精品第二页| 日韩欧美在线影院| 中文字幕5566| 天天av综合| 海角国产乱辈乱精品视频| 国产女主播喷水视频在线观看| 男女男精品视频网| 国产91免费视频| 国产小视频免费在线网址| 成人欧美一区二区三区1314| 国产精品三级一区二区| 欧美电影免费看| 欧美一区二区三区四区在线观看| 免费看毛片的网站| 天天综合精品| 2018中文字幕一区二区三区| 亚洲一区二区色| 成人av在线影院| 一区二区三区四区国产| 国产丝袜在线播放| 欧美视频一区在线观看| 怡红院一区二区| 99精品在线观看| 555www成人网| 精品国产av 无码一区二区三区| 99久久99久久精品免费观看| 在线观看一区欧美| 免费成人动漫| 亚洲电影在线观看| 亚洲天堂网av在线| 日韩vs国产vs欧美| 久久精品日产第一区二区三区精品版 | www.色小姐com| 肉肉av福利一精品导航| 九九九久久久| 九色91在线| 欧美精品xxxxbbbb| 日本一区二区视频在线播放| 精品成人国产| 99在线看视频| 菠萝菠萝蜜在线观看| 中文字幕欧美三区| 欧美综合在线播放| 免费观看亚洲视频大全| 色香阁99久久精品久久久| 日韩欧美成人一区二区三区| 国产精品1024| 国产欧美综合一区| 精品久久99| 国产亚洲精品久久久优势| 欧美日韩综合在线观看| 成人av免费观看| 亚洲乱码日产精品bd在线观看| 日韩伦理一区二区| 日韩在线观看你懂的| 国产精品无码粉嫩小泬| 久久精品免费在线观看| 国产三区在线视频| 色婷婷精品视频| 91精品国产91久久久久福利| 人人妻人人澡人人爽精品日本| 一区二区在线观看视频| 欧美污在线观看| 成人综合一区| 国产精品视频专区| 午夜免费福利在线观看| 欧美日韩在线综合| 网爆门在线观看| 久久激情五月激情| 黄色免费高清视频| 亚洲专区**| 国内精品模特av私拍在线观看| 日本黄视频在线观看| 天天av天天翘天天综合网色鬼国产 | 免费在线小视频| 亚洲韩国青草视频| 欧美videossex极品| 久久久精品综合| 69久久久久久| 欧美1区2区3区| 国产精品一区二区三区四区五区| zzzwww在线看片免费| 日韩精品中文字幕视频在线| 午夜精品免费观看| 亚洲丝袜美腿综合| 五月天丁香社区| 国产日韩欧美一区在线| 五月婷婷综合色| 国产日韩欧美中文在线| 久久久综合av| 国产一级片在线| 欧美一级夜夜爽| 国产成人在线观看网站| 欧美激情在线观看视频免费| 在线观看中文av| 亚洲区国产区| 亚洲国产精品www| 精品视频成人| 欧美在线观看网址综合| av电影在线网| 欧美一区二区三区免费大片| 日韩av女优在线观看| 久久久不卡网国产精品一区| 污污的视频免费观看| 在线日韩欧美| 一区二区不卡在线视频 午夜欧美不卡'| 电影中文字幕一区二区| 88国产精品欧美一区二区三区| 成人亚洲综合天堂| 亚洲国产天堂久久综合网| 精品国产www| 亚洲午夜国产一区99re久久| av电影在线不卡| 国产99久久久久| 91在线视频观看免费| 欧美性久久久| 欧美一进一出视频| 99精品国产一区二区三区2021 | 激情综合婷婷| 国产成人高潮免费观看精品| 日本性爱视频在线观看| 在线视频日本亚洲性| 男人天堂综合网| 91麻豆精品国产91久久久资源速度 | 欧美精品二区| 色综合久久av| 日韩激情网站| 国产精品日韩高清| 国产成人视屏| 国产精品久久久久久五月尺| 九色porny丨入口在线| 久久91精品国产91久久久| av在线免费一区| 亚洲乱码国产乱码精品精| 国内精品久久久久久久久久| 欧美裸体一区二区三区| www.com亚洲| 欧美日韩国产综合视频在线观看中文| 青青草原国产视频| 中文字幕中文字幕一区二区| 亚洲av无码一区二区三区人 | 老色鬼久久亚洲一区二区| 日韩一级片免费视频| 亚洲综合色网| 综合网五月天| 色喇叭免费久久综合网| 日本视频一区二区不卡| 天堂一区二区三区四区| 国产伦精品一区二区三区四区免费 | 一级毛片视频在线| 一区二区欧美在线| 久久精品a一级国产免视看成人| 亚洲电影免费观看高清完整版在线 | 日韩和欧美一区二区| 人妻精品无码一区二区三区| 亚洲精品影视| 国产原创中文在线观看| 1024日韩| 欧美视频第三页| 亚洲欧美日韩在线观看a三区 | а√在线天堂官网| 国产做受高潮69| 日本在线啊啊| 欧洲中文字幕国产精品| 最新欧美色图| 日韩美女在线观看一区| 浪潮色综合久久天堂| 国产精品电影在线观看| 国产精品无码久久久久| 国产在线观看精品| 国产一区二区三区国产精品| 91久久国产综合久久蜜月精品| 免费一区二区三区在线视频| 91入口在线观看| 成人台湾亚洲精品一区二区| 国内外成人免费视频| 香蕉久久夜色精品国产使用方法| 精品欧美一区二区在线观看视频| 神马午夜久久| 日本一区美女| 91精品天堂福利在线观看 | 性欧美videos另类喷潮| 中文字幕无码不卡免费视频| 男女男精品网站| 欧美性猛交xx| xnxx国产精品| 极品尤物一区二区| 亚洲专区一二三| 亚洲va在线观看| 欧美日韩一卡二卡三卡| 亚洲av综合色区无码一二三区 | 色婷婷一区二区| 亚洲永久精品视频| 精品久久国产老人久久综合| 毛片网站在线| www.99久久热国产日韩欧美.com| 欧美xxxxhdvideosex| 青青青国产精品一区二区| 久久久久久久性潮| 国产乱码精品一区二区三区卡| 精品日产免费二区日产免费二区| 欧美性受黑人性爽| 亚洲综合国产| 国产精品嫩草影视| 久久亚洲综合av| 永久免费看片视频教学| 黄色成人av网| 91国偷自产中文字幕久久| 亚洲福利精品在线| 无遮挡的视频在线观看 | 成人小视频免费在线观看| 成人性生交大免费看| 亚洲激情网站免费观看| 青青草视频在线观看免费| 日韩欧美精品三级| 第一页在线观看| 国内自拍欧美激情| 亚洲一区二区av| 欧美自拍资源在线| 狠色狠色综合久久| 国产3p在线播放| 久久精品欧美一区二区三区不卡| 免费日韩在线视频| 欧美高清视频在线高清观看mv色露露十八 | 看片网站欧美日韩| 国产精品无码一区二区三区免费| 亚洲免费观看高清在线观看| 中文字幕免费观看| 日韩精品欧美国产精品忘忧草| 国产精品一区二区三区视频网站| 日韩精品极品在线观看播放免费视频| 日本成人在线播放| 日本精品免费一区二区三区| 超碰在线亚洲| 一本二本三本亚洲码| 青青草视频一区| 国产精品扒开腿做爽爽| 午夜久久久久久电影| 性猛交富婆╳xxx乱大交天津 | 这里只有精品电影| 日本中文字幕视频在线| 国产精品电影在线观看| 蜜乳av综合| 精品中文字幕av| 91女神在线视频| 国产亚洲精品成人| 日韩欧美精品三级| 亚洲精品一线| 91在线色戒在线| 影音先锋日韩在线| 天天做天天干天天操| 国产精品久久精品日日| 中文在线观看免费高清| 在线不卡国产精品| 日韩毛片一区| 深田咏美在线x99av| 青青草国产精品亚洲专区无| 久久久久久亚洲中文字幕无码| 欧美性xxxx极品hd欧美风情| 视频二区在线| 日本欧美在线视频| 国产毛片一区二区三区| 国产成人av影视| 欧美国产乱子伦| 亚洲中文字幕在线观看| 久久视频在线直播| 日韩精品一区二区三区中文| 日本黄大片在线观看| 国产91对白在线观看九色| 国产午夜福利一区二区| 亚洲国产精品va在线观看黑人| 黄色aa久久| 日本在线观看一区二区| 青青草97国产精品免费观看 | 婷婷成人综合网| 日韩美女一级视频| 国产精品aaaa| 99精品全国免费观看视频软件| 在线视频一二区| 亚洲高清免费一级二级三级| 天堂a√在线| 国产精品福利在线| 国产精品久久久久久久久妇女| 人妻体体内射精一区二区| 亚洲电影激情视频网站| 国产一区电影| 91传媒视频免费| 制服诱惑一区二区| www..com.cn蕾丝视频在线观看免费版| 欧美日韩视频在线第一区| a级网站在线播放| 激情伦成人综合小说| 青娱乐精品视频| 久久久精品99| 亚洲色图色老头| av日韩一区| 免费看国产曰批40分钟| 国产精品麻豆一区二区 | 国产成人免费视频| 性无码专区无码| 久久综合免费视频| 日韩美脚连裤袜丝袜在线| 九九热免费在线观看| 亚洲成人中文在线| av网站大全在线观看| 国内精品久久久久久久果冻传媒| 琪琪一区二区三区| 日韩av在线播| 久久亚洲电影天堂| 九色成人国产蝌蚪91| 中文字幕久久久久久久|