C++類中的各種成員,嵌套類,友元,this指針專題_第1頁
C++類中的各種成員,嵌套類,友元,this指針專題_第2頁
C++類中的各種成員,嵌套類,友元,this指針專題_第3頁
C++類中的各種成員,嵌套類,友元,this指針專題_第4頁
C++類中的各種成員,嵌套類,友元,this指針專題_第5頁
已閱讀5頁,還剩3頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、本文作者:黃邦剪帥 學習本文首先你應熟悉C卄中的構造函數,堆本的類的聲明及怎樣初始化類,關于這些問題,詵參看本人所作的C+ 構造函數,復制構造旳數和析構函數一文,在這篇文章中作了詳細的介紹。學握C卄類中的冬種成員,是學習好C卄的荃礎,因此對于本文妁內容應全部熟練學握,本文上要集中介紹C卄類中的 各種成員,這些成員分別是;類中的靜怒static)成員變嵐成員函數;consK常量)成員變最,成員函數和const對象;const stauc(常最靜態丿數據成員;對彖數組:類中的對彖成風 類成員捋針;嵌套類:友元;this指針以及審和亠運算符共12 種內容。本文內容全面,簡單易懂,是學習C卄不錯的選擇

2、。本文內容完全屬于個人見解與參不文現的作者無關,英中難免有謀解之處,望指出更止。聲明:禁止抄董本文,若需要轉載本文請注明轉載的網址,或者注明轉載n “黃邦勇帥”。主要參考文獻:1、C+.Pnmer Plus.第五版中文版美Stephen Prata著 孫建春 韋強詳 人民郵電出版社2005年5月2、C-H-.Pnmer.PLus.第卩4版中文版Stanley B Lippman、Barbara EMoo箸 李師賢等譯 人民郵電出版社2006年3月3、C-H-.Piimer.PLus.第三版中文版StinLey BLippman等著 潘愛比張麗譯中國電力岀版社2002年5月4、C卄入門經典笫三版

3、Jlvor Horton著李予敏譯清華大學出版社2006年1月5、C+參考大全 笫四版美Hebert Schidt著 周,忐榮 朱徳芳于秀山等譯 電于工業出版社2003年9月6、21天學通 第以版C+ JJesse Liberty著康博創作室譯 人民郵電出版社2002年3月類中的各種成員const ,staac,*px:onst static,對象成員,常帚:對象.mutable類中的靜若成員妞static:被類中的所冇對彖所共享,靜態成員屬于整個類不屬于某個對彖。靜態成員變最和全局 變最差不多,只是他的作用范帀為定義他的類及類的對象所知。1. L出在個類中聲明靜態成員變最時并沒仃運義該變最即

4、沒冇為他分配存儲空間,所以必須在類外對靜態成員變 量提供全局定義.注意必須在類外,這樣就可以為變最分呢內存,定義的方式為使川作用域解析符,比如冇類 hyong類中有靜態整型成員a,那么在類外疋義該變;讓的方式為int hyong工=9,注盤必須要令在類中聲明的類型, 如果定義時沒有初始化則自動初始化為0o1.2. 靜態成員變量如果是類中的公冇成員則可以在程中使用語句hyong a來訪問該變屍當然也可以通過對彖名 來訪問該變帚:,如果變最是私冇或者保護的則只能用靜態的成員函數來訪問該變量。1.3不能用初始化列表來初始化靜態成員變量。2.靜態成員函數static,靜態成員函數沒冇this指針,靜態

5、成員函數只能引川這個類的其他類靜態成員,半然全局函數 和數據可以訪問,因為類的旳數都婆用this指針來訪問成員,閔為靜態成員函數沒令this指針,所以不能訪問除靜態 成員之外的成員。同 個函數不可以冇靜態和非靜態兩種版本,靜態成員函數不可以是虛函數,靜態成員函數不能是 const和volaaleo靜態成員函數使用是佇限的,通常使用靜態成員曲數來訪問類中的私有靜態成員變最。在類外定義 的形式為int byong g()注就 這里沒有statLC說明符。const成員變量參著第四節初始化列表.const成員函航 形式為mt f(j const!,£ const在括號辰 如果把const放

6、任int前就成為個反冋const int類型的函 數了,把函數聲明為const后就使得this i«I以半做個const指針,從而使得函數不能修改調用它的對象也就是說不能 改變任何個類的成員變彊的值。如果想讓const函數能修改某部分成員,可以把該成員聲明為mutable類型,例 如 mutable in: ao 在類外定義的形式為 int hyong :f() constconst static常量靜態數g成員,這種類型的成員變鼠可以直接在類的怎義中M接初始化,這也是唯 種可以在類 中初始化的類型,如果沒有在夾中初始化.在類外的初始化方式為const mt hyong a=2,注意

7、const和類型都必須有。6.const常量對象:即把對象芮明為常尿UP const hyong m,常量對彖不能調川可能改變對彖的值的函數,內此估最對 象只能調用類中的const常最函數,因為不是const的函數都有可能改變對彖的值。6.2. ®屋對彖可以調川類中的公有成員,如ma就是止確的如果a是公有的。6.4.不能對常最對象的公有成員乖新賦值,如ma=3就是錯誤的。但可以對類中的公有靜態成員變最熏新賦值因 為靜態成員變是不屬于這個常暈對彖,他是屬于整個類的。對象數組:對象數組即數組中的每個成員都是-個對象,例如hyonga3,Jt中a0, alr2都是-個hyong類型的 對彖

8、。對象數組的初始化,如果右默認構造函數則語句hyong a3W調川默認構造函數初始化3個對象,如果對象數7.組帯冇個參數的構造函數則可以這樣初始化hyonga3=lA3如果對彖數組帶仃多個參數的構造函數,則初始化 方法為 hyong a3=hyongU2丿4yong(3,4#iyong(4,5)。例:各種類成員,對象數紐常童對象的使用.class hyong static int e; /私有靜態成員變呈.聲明靜態成員變址時沒仃為他分配存儲空間必須在類外部定義。public: int a;static int b; 掙態成員變駅const static int c=9; 常量掙態成員變此 只有

9、這種類型的變呈才能在類中聲明時初始化,也可以在類外部初始化. static int g(); 粋態成員函數.一般用這個函數訪何類中的私有靜態成城變雖.其他地方用處不大.int f0 const; 常吊成員怖數.注盤const的位世hyong()a=b=e=l; 注意,如果在類外部定義了靜態成則可以構造函數中龜新設置他們的(1仁否則就會錯誤.hyong(int i) a=b=e=i;hyong(int i, int j) a=izb=e=j; void ff 0 cout«a;/static靜態成變量定義的注意事項/hyong:hyong0:a(l),b(l), e(l) /錯謀.不能

10、用初始化列農初始化靜態成員變雖。int hyong:b=8int hyong: e=7;定義靜態成員變吊胖念成員變尿必須在內外定義以便分配存儲空間如果不提供初值將被初始化為0:/const int hyong: :c=9; 挪念常雖成員變雖也可以在類外初始化,注慈兀用法沒冇static關見了。/static靜態成員函數定義的注意事項int hyong:g() cout«e«nr;return e;/cout«a; a=l; 錯謀靜態成員函數只能訪何類中的靜態成員變呈.既使不改變變星的值也是不行的.靜態成員函數般用來訪問類 中的私有靜態成員變呈常量函數定義的注意事項

11、int hyong:f 0 const cout«a«b«c«e«*n*; return ;注童除了的< A數外氏他函數同樣可以訪間類中的私有靜態成員變/a=l;錯誤.const常就成員嗨數不能改變任何成員變戢的值 int mainO/static靜態成員函數和變童的應用hyong m; cout«n a«» b«m c«"n"/ cout«M.e; 錯誤靜念成員變扯e是私冇的.對彖不能訪問.可以適過靜態成員函數來訪問e.呀然也可以用英他成員函數來訪問e。 c

12、out«>. g(XCn ; 調川掙念成員函數訪問類中的私仃靜態成員變竝e/cout«hyong:e; 錯誤.靜態成員變厳e是私有的.只能通過換數來訪問cout«hyong:b<Cn; 岡為靜態,iV的.啲爻的某個對紐 所以可以通過作用城解析符來直接訪問hyong n, cout«n.b«*n*;m.b=5;cout«iLb«».b<Cn/輸出兩個凡 注意這世用對彖m改變靜態成員變卅b的值.但対J対線n來說對彖n并沒仃改變他的值.然 而b的值卻改變了.這就說明掙念成員變吊屈丁整個類.不屈丁菜個對彖

13、.hyong m22; 聲明一個常數組這里將調用兩次默認構造曲數以初始化兩個對彖>2021 cout«n20. a«B2ll. b<Cn 輸出兩個四 m20,m21被默認初始化函數初始化了.hyong m32=1,2); 訓川帯仃 個形參的構造函數冊始化對彖數組的成頁cout«ji30. a«>3l. a«n 輸出一和;hyong «4二hyong(3, 4),hyong(5. 6); 調用帶兩個形參的構造函數.竹始化對彖數組的形式.cout«>4 0. a«*4l. a«'

14、;n" 輸出工和五/const常童對象的應用const hyong 7;/聲明 個常說對彖.常吊對彖不能調用可能改變對彖值的任何函數訓用默認構適函數初始化他.但被初始化常彊對彖的值將不能彼改變。Jil.fO; 調用的常量成員丙數.輸出四四九四。/ml.ffO; 錯派BlWliJ:對彖.不能調用除Tconst之外的任何成員函數,因為他們都冇可能改變常雖対彖>1的值。/>l.a=2; 錯論常雖對彖不能改變成員變雖的值。ndb=2;正確,常量對象雖然不能改變成員變量的值.0變量是個例外,因為他不屈丁對象他MTS個類.不屈J:某個對象.cout«Bl.b«&g

15、t;n*;8.類中的對象成員:即把對象作為另個類的成員。比如class hyong 1 publichyong人,這時如果聲明了 個hyongl 的對象則調Jlj hyong的默認構造函數初始化對象x而不管hyongl的構造函數有沒有初始化對象k,如果沒有聲 明hyongl的對彖,則不會初始化對彖Xo2. 如果要在川帶有參數的構造兩數初始化類中的對象成員,則對象成員必須在初始化列農中初始化。否則將發牛錯3. 如果在初始化列表中顯式對hyongl的對象成員k初始化了,則川初始化列農的構造兩數初始化對象不會再調 用對彖成員X的默認構造函數初始化對彖X To4. 如果再在hyongl的構造函數里對x

16、重新賦值,即有語句x=hyong(),此語句不是對對象變帚:k初始化,而是對對 彖x巫新賦值,將調用賦值操作符因數。例,類中的對象成員的注意事項class hyong public: int a.b;hyong() a二b=0;cout«5ogoLT<n"hyong(int i) a=b=i;cout«onegou«<nAr;hyong(int i, int j) a=i;b=j; cout«*tvogou<«>n*;class hyonglpublic: int a> b;hyong x;把另個類對線做

17、為類的成員。II調用hyong的默認構造函數初始化対彖x/hyong y(9); 借決.不能這樣調用hyong的帶-個參數的構造函數初始化類對彖y;要調用帶參數的構造函數初始化類對彖成員只能在初 始化列表中進行.hyonglO a=b=2;cout«>mogoul>«irnr; hyongl(int i) a=b=i; cout«*onegoul«>n#; hyongl (int i, int j);如果要使用帶參數的構造函數初始化類中的對彖成員,只能在初始化列表中進行hyongl :hyongl (int 1, Int J)!a(l)

18、,h(J), x(3) ) 川初始化列新初始化類對敷成員此時就不會調用J始化 類中的對彖X 了。int mainO hyong m; 輸出mogou.此時沒仃創iuhyong 1的對直,所以不會初始化hyongl屮的類對gx。hyongl n; 此時調PJhyong的默認構適函數以初始化hyongl的類對徐x,hyongl nl(4.5); 此時用nl的帯兩個參數的仁故初始化對象nl并調用初始化列花的帶冇 個參數的hyong的構造聞數初始彳thyongl類的成員變雖心注臥 此時不會調川hyong的默認構造函數初貽化對彖成員xnx=hyong(6, 7) 對類中的成員對象譙新初始化.這里是賦值將

19、會調用默認賦值操作符.不會調用默認復制構造函數cout«n. x. a«n.x. b; /訪問類中的對彖成員的成員的方法9. 類成員指針和匚>勺運算符91聲明類成員指針的方式為:mthyong *pl聲明了一個指向類中整型成員的指針pl。mt(hyong: *p2X)注意括號,聲 明個指向反回類型為mt的無參數的函數的指針p29.2. 對類成員指針的初始化方式為:pl=&hyong :a> p2=&hyong f.注意初始化指向類函數的指針時不能省抻&地址運算 符。.9.3. *運算符:*運算符的左側必須是-個類的對象,而右側則必須是類類

20、型的成員指針。比如hyong g則運川方式為 m *pl9.4>運算符:運算符的左側必須是-個指向對彖的指針,而右側則必須是-個類類熨的成員指針。比如有hyong *p=&m,則運用方式為p->*pl o9.5類成員指針即抬向類中成員的指針注意足苴接抬向類中的成頁而不足描向對彖的某 成員的指針,即與描針L&gJ 是不 樣的。類成員指針提供的是成員在類中的對象的偏移尿 不是 個其1E的指針。因為不是個其止的指針所 以不能通過指針來力問類屮的成b. Iflj只能通過特殊的運算符來訪問指針指向的成員。比如巾1=2 hyong: 1=2定錯決的,不能對類成員指針指向的類成員

21、伍接賦值。cout«*p 1 «hyong:*p 1也是錯浜的,不能Ci接 用類成員指針來訪問類中的成員。例:類成員指針和.方與->嚨算符class hyongpublic: int a,b int f 0 cout«*fhanshu'r«a<Cn<retum a; hyong0 a=l, b=2; hyong(int i) (a=5,b=i;int mainO int *p;聲明一個常厳指針int hyong: :*pi; /聲明-個類成員指針,注總這種指針是指向類中的成員的.不是指向對彖中的某個成員變邑int (hyong:

22、 :*p2)(); 聲明一個類成員指針因數hyong *p3; 聲明一個指向對彖的指針hyong m; p=4m. a; cout<*p«"n" 注總指針p是指向的對彖中的某人成加變雖。pl=4hyong:a;注意賦地址的格式.注總指針pl是指向的類以的某個成員和指針A是不同的。p2=4hyong:f;指針p2指向類中的某個函數.注總語句格式,雖然函數名就是函數的地址,但這里必須得冇&地址運克符.cout«M. *pl«M. a<Cn ; 用燧算符訪問對彖中的成加變:!,案運算符的左側必 類類型的對彖,右側必須是 塑的成 葉

23、其 實水pl和都是指的對彖鼻中的成員吐 只是和1是通過指針來訪問的./hyong: :*pl=3 >1=3; 錯謀,雖然pl是指向類成員變吊Z的指針.但不能直接使用該指針對該指針指向的成員變厳進行訪問,只能使用川 和6運算符才能訪問類中的成員變量。/cout «hyong :*pl; cout«*pl; 錯謀和以上悄況和同只能通過*或者->*運算符來訪問類成員變雖。m.*pl=2; cout«>.*pl«endl; 把類成員指針指向的類的成員變吊.a的值賦2并輸出其值。cout«Gi. *p2) ()«>. f

24、 0«"n" /訪何成員函數p3=4>cout«p3->*pl«(p3->*p2) ()« 用->*運算符訪問對彖中的成員.運算符左側必須是類類申的指針.右側必須是該類類型的成員折針cout«p3->a« (p3->f) ()«*n"J10. this指針;this指針是所有成員慚數的隱含指針,每次調用成員函數時,this指針就指向調川此函數的對象。町以在 成員函數類部使川顯使川tks指針。友元函數不是類的成員函數,所以友元函數沒冇this指針。靜態成員函數也

25、沒 有this指針° this指針默認是* const this類型,即this是-個常最指針,不能改變this指針指向的地址。例:this指針的使用class hyong (public: int a,b;hyong0 (a=l,b=2;hyong(int i) a=b=i;hyong f (hyong 4k) (if (this->a<k a) return k, else return *this,/this=4k;/錯謀,this指針是常雖指針.不能改變this指針指向的地址° ;int mainO hyong m(2),n(3), 1;1=m. f (

26、n); cout«l. a«l.b; 例:對各種與類有關的指針的綜合使用,整個程序有12個輸出語句,總共輸出12個2。class hyong public: int a. b, *c; hyong0 a=l, b=2; hyong(int i) a=b=i;c=fta,;記住一條定律:點運算符的左迦嫁是對象,而箭頭->運算符的左邊必須是f指針.int mainO hyong ii(2),n(3).*p=4M, int *pr=4m. a, int hyong:*pl=Ahyorg:a;向對象的指怖的調用方法cout«p->a;用-> 箭頭運算符調

27、用成員變就a。cout«(*p).a; 用運算符調用成員變童a點運算符要求左邊必須是對象.而*p就代表指針指向的對彖。/調用類中的指針變童的方法cout«*(B.注意調用廳法.mc表示調用對務5中的指<|誠員c的地址.加I?則表示調用對紅中的拓針成員c的值點運畀符的優先級高*指針運毎符.所以可用也可不用括匕點運知符的左邊是對儀/cout«*p. a«*(p. a); 借謀川I為p是指向対彖的指針,點的運算符高"運算符,所以點運算符的左邊是-個指針D不是對彖而發生錯誤。 向對象中的成員的指針的用法cout«*pr; /pr只是個整

28、型指針,他指向的是對彖中的成員變Uta的地址。/cout«(*pr). a«*pr. a«*(pr. a)«pr. a; 錯誤.pr不是一個對彖,他只是一個指向對彖中的成員變雖的整型指針使用指向對彖的指針調用對象中的指針成員的方法cout«*(*p). c«*(*p). c); 注I_ i*p必須搖起來*P表示的址指偽p所指向的刈.1*P)C*IZ;小調用P指向對彖的指針成員C的地十.所以最后耍用來表示指針C的值.即*(*p).c)就表示P所指向的對彖中的指針成員變試C的值。 cout«*p->c«*(p-&

29、gt;c); 使用簡頭運斤符調用對彖中的指針成員C的方法岡為->運舁符耍求左邊必須足指針.所以Lc就表示詭用指針 P所指向的指針成員C的地址,*(p->c)就表示調調用的指針P所指向的對象的指針成員變凰C的值。発煙的指針的調用方法COUt«M. *pl; 車運耳符左側必須要是對彖名,右側必須要是個類類型的指針COUt«p->*pl; />運算符左側必須要求是一個指針,右側也必須耍求是-個類類型的指針 cout«(*p).*pl; 岡為*層側必須要求是一個対豫名所以(*p) 的就是指針p所指向的對彖。11.嵌套類:即類中的類。11.1.112

30、、1.5.嵌套的類的聲明:比如classApublic: class BJll卩在類A中聲明了 個類B。類和外圍類是兩個互相獨立的類:也就是說嵌套類中的成員屈丁嵌套類外圍類不知道這個成局外圍類的成 員屬丁外圍類而嵌套類不知道外圍類的成員。如果耍在肢套類中訪問外圍類的成員則必須以外圍類的指針,引用 或對彖的形式訪問外圍類屮的成員。同樣,如果要在外圍類中訪問恢套類中的成員時也必須以嵌套類的指比 引 川或對線的形式來訪問嵌套類中的成乩 比如class Apublic mt a, class Bpublicint b, void gb()a=3,就是錯誤 的,I月為外【曲類的成員在

31、嵌套類屮是未知的,止確的jj法為class Apublicint a,class Bpublicint b, void gb(jA 即在嵌套類中聲明一個對彖m再用這個對彖對訪問外I制類的成員嵌套的類的定義:嵌套的類即可以在外國類中怎義也可以在外圉類外定義,比如class ApubUc cLass 外用類A中定義了一個什么也不做的嵌侖的Bo外I十恢A的外面泄義械套類B的方法為:class A B,在外圉類外怎義嵌套類時要在嵌套類的詢面使川作用域解聽運算符以指岀這個嵌套類來足外國類A,如果不指疋 就是雨新定義-個新的同名類Bo在嵌套類外定義嵌套類中的成員:不能在外圍類中定義嵌套類的成員,I人I為外

32、川類和嵌套類是互相獨立的。婆在 嵌套類外定義廿 於的成員必須在外圍類外定義。且必須使用作用域解析運算符以指定這個成員是哪個外圍類的, 比如嵌套類B中有成員voLdgO則在外圉類A外定義的方法為:void A :B go5 個作用域解析運算符指出嵌套 類B的外帀類是A,第二個作用域解析運算符指出函數gU是嵌套類B的成員函數。在嵌套類中可以直接訪問外圍類中的靜態成員,耀名和枚舉成員即在恢套類中訪問這些外圍類的這些成負時 可以不使川作川域解析運算符,肖然也可以使川。而在外【節I類的外面訪問這些成員時必須使用作川域解析運算符。116、外圍類的對最同樣不能直接訪問嵌套類中的成員.但可以用作用域解析運算符

33、來訪問,這條規則只適合于公有成 員變量.對成員議數則是錯誤的.原因在下面說明.比如冇外帀類A和外國關A的成門少看嵌套類B,和嵌 套類B中的公冇成員變最在rrnm西數中令語句Amqb=3則是錯誤的,而mB二b=3,就是止確的訪問方式。 但反過來川嵌套類B的對象訪問外圍類B中的成員就不行了,因為嵌套類不知道外圍類中的成員,比如main函 數中有語句Bgn.A :a=2,就是錯誤的因為嵌套類B不知道外出|類A的存在,所以是錯誤的。117. 半使用上而的方法使川外圍類訪問嵌套類的非靜態成員函數時,因為外圍類和嵌套類的IF靜態成員函數都冇隱藏的 this指針,而外I制類的this指針指向外|1;|類的對

34、象 嵌套類的this指針指向嵌套類的對勿 這時就存在this指針指 向不同的對彖的問題。比如Agm.BgU這時就會岀現外圍類的this指針無法轉換為嵌套類的this指針的錯謀, 所以不能使用上面的方法訪問嵌套類中的成員換效11.8、訪問控制權限同樣適用于嵌套類,出嵌套類為公冇,私冇和保護的訪問權限時,嵌套類同樣遵導成員變最的私冇, 公有和保護的特性。11.9嵌套類的構造函數和析構函數:在創建個外圍類的對象時先執行嵌套類的構適函數然后再執行外圍類的構適函 數,析構函數則以相反的方式執行。對于嵌套類只要知道枸造函數和析構西數的執行順序就行了.兀余的問題不 做介紹。11.10創建嵌套類的對象的方法,

35、比如類B是類A的嵌套類,則創建類B的對象的方法為A Bmab,這時只會調川嵌套類 中的構造函數,而不會調用外國類A的構造函數,因為這里只創理了嵌套類B的對彖。嵌套類舉例:class A class D(public:int dd汀;聲明 個私有的嵌套類)public: int a,b static int e; const static int ee=0;趙 一MJ3g開始class Bpublic:int c, d;/在嵌套類中訪問外惘類的成員的方法void gb() c=9/a=l;/錯誤.生嵌套類B中不能訪問外國類A中的成員。因為肢套類的成員和外國類的成員是耳相獨立的。/A:a=l;/錯

36、謀.也不能以這種方式來訪問外國類A中的成員a. I人1為a是作掙態成員。A m; 耍訪問外囤類中的成員.必須以外即類的指針或石對彖的方式訪問. m. a=l;cout«*gb() A:m. a="<<m. a«endl rb. ga();void gbl();在嵌套類B中聲明一個在外幗類A定義的函數.叔««結束/ voidB:gl()cout««endl; 錯謀.不能在外國類A中定義恨套彪的成員。只能在外刖類A的外面定義。因為嵌套類的成員和外119 類的成員是互相獨立的。B n;可以在外圍類中聲明嵌套類的對象.在

37、外也類屮訪問獲套類的成員的方法void ga()a=9;/c=2; 錯論夕卜國類A不能訪問嵌奩類B中的成員。因為欣套類的成員和外鬧類的成員是互相獨立的/B:c=2; 借謀不能以這種方式來訪問喊套類中的成員,肉為成員c不是存態成員n.c=3; cout«*gcO B:n. c=*«n. c«endl; 止確,工外國類中訪訕枚套類屮的成員,必須以嵌套類的指什或対彖的方式訪問。Dud; id. dd=14; cout«*d. dd=<«BcL dd«endl: /正確,私有嵌套的類可以在外圍類中使用class C; ; 在類A中聲明嵌

38、套類C.以便在類A的外山淀義嵌套類C。/佐外圍勁定義嵌套類的方法及訪問外圍類的靜態成員int A:e=0; 彼蛤化外 中的靜態成員eclass A:C /4外圍類的外部定義嵌套類的方法,在外圍類外定義嵌4勺作川域復E自外BS類A.public: void gc() (e=3;cout«A: :e«ee«A:ee«endl; 可以4恢空類中fl接該問外I口類中的靜態成員.靜態常;i;成員類型名和 枚舉成員,也可以乞嵌套類中加上作用域解析運舜符。任外國類外訪問這些成員就必須耍使用作用域解析符。void A:B:gbl 0 cout«gbl0 

39、71;endl; /4外國類的外部定義嵌套類口的成員必須耍使川作用域解析符以指定嵌套類的外圍類是A。 /ain®數開始 int mainO A aa; 聲明一個外國類的對彖。構造用數的執行順序是先構造嵌套類然后力是外國類 析構旳數則按相反的順序執行。構造旳數的例子 就不舉例了,只要知道構造的先后順序就行了/»a.c=3j!ia. gb(); 錯誤,成員c和gb()不是類A的成員,而是嵌套類B的成幾»a. n. c=33; cout«*class A ma. n. c=*«>a.n. c«endl; /通過右外I甘類中聲明的肢套癡

40、的對彖n來訪問IIIB中的成員°man gb();ma. B:c=333; cout<CMa. B:c=*«ha. B: :c«endl; /正確.可以用作用域解析符以指定成員c是來自嵌套類的.:gb(); 錯誤.嵌套類B和外川類A的非靜態成員函數的this指針指向不同的對象,在這里就不能把指向外圍類A對彖的this指針轉 換為指向恢套類B對彖的this指針.所以出現錯誤。A:B Bb; 外BBi外聲明一個嵌套類的對彖的I也必工嵌套類B的前山I用作用域解析操作符指出ift套知來門外川類A這里只執行嵌套類的構造悄數.不執行外國類的構造說數。因為只創建了嵌套類的對彖。Jib. gbl();/>b. gc(); 錯込gcO足外圍類A的成員,不足嵌套類B的成員./Mb.A:a=ll; 錯謀.夕卜國類的對彖可以這樣訪問嵌套類中的成員變乩 但反過來就不行幾I人I為B是嵌套在類A中的.所以在這里嵌套 類B并不知道有類A的存在,在這里就會認類外國類A不是嵌奩類B的成員的錯誤。/A:D Md, 錯派 恨套類D是私冇的,不能在外國類的外而聲明私仃的衣套類的對彖。12、血1. 聲明友元的I的是訃類的作成員函數或者類能訪問該類對彖的私令和

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論