從C++到Objective-C(4):類和對(duì)象_第1頁
從C++到Objective-C(4):類和對(duì)象_第2頁
從C++到Objective-C(4):類和對(duì)象_第3頁
從C++到Objective-C(4):類和對(duì)象_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、從C+至U Objective-C(4):類和對(duì)象(續(xù))作者:?日期:2011 年03月19日?(9)方法Objective-C 中的方法與 C+的函數(shù)在語法方面風(fēng)格迥異。下面,我們就來講述Objective-C的方法。原型、調(diào)用、實(shí)例方法和類方法? 以-開頭的是實(shí)例方法(多數(shù)情況下都應(yīng)該是實(shí)例方法);以+開頭的是類方法(相當(dāng)于 C+ 里面的 static函數(shù))。Objective-C 的方法都是 public 的;?返回值和參數(shù)的類型都需要用小括號(hào)括起來;?參數(shù)之間使用冒號(hào):分隔;?參數(shù)可以與一個(gè)標(biāo)簽label關(guān)聯(lián)起來,所謂標(biāo)簽,就是在 :之前的一個(gè)名字。標(biāo)簽被認(rèn)為是方法名字的一部分。這使得

2、方法比函數(shù)更易讀。事實(shí)上,我們應(yīng)該始終使 用標(biāo)簽。注意,第一個(gè)參數(shù)沒有標(biāo)簽,通常它的標(biāo)簽就是指的方法名;?方法名可以與屬性名相同,這使 getter方法變得很簡(jiǎn)單。C+/原型void Array : insertObject (void * anObject, unsigned int atIndex );/ shelf 是Array 類的一個(gè)實(shí)例,book 是一個(gè)對(duì)象shelf. insertObject (book, 2);Objective-C (不帶label ,即直接從 C+翻譯來)/方法原型/ 方法名字是insertObject:/這里的冒號(hào):用來分隔參數(shù),成為方法名的一部分(注意

3、,這不同于C+的域指示符::)-(void ) insertObject :( id ) anObject :( unsigned int ) index/ shelf 是Array 類的一個(gè)實(shí)例,book是一個(gè)對(duì)象shelf insertObject: book : 2;Objective-C (帶有 label)/方法原型?!癷ndex”有一個(gè)標(biāo)簽“atIndex ”方法名為insertObject:atIndex:這樣的話,調(diào)用語句就很容易閱讀了-(void ) insertObject:(id ) anObject atIndex:(unsigned int ) index/ shel

4、f是 Arrayshelf insertObject類的一個(gè)實(shí)例,book:book : 2;是一個(gè)對(duì)象shelf insertObject:book atIndex/錯(cuò)誤!:2 ; / 正確注意,方括號(hào)語法不應(yīng)該讀作調(diào)用shelf對(duì)象的insertobject方法”,而應(yīng)該是 向shelf對(duì)象發(fā)送一個(gè)insertobject消息”。這是Objective-C 的實(shí)現(xiàn)方式。你可以向任何對(duì)象發(fā)送任何消息。 如果目標(biāo)對(duì)象不能處理這個(gè)消息,它就會(huì)將消息忽略(這會(huì)引發(fā)一個(gè)異常,但不會(huì)終止程序)。如果接收到一個(gè)消息,目標(biāo)對(duì)象能夠處理,那么,目標(biāo)對(duì)象就會(huì)調(diào)用相應(yīng)的方法。如果編譯器能夠知道目標(biāo)對(duì)象沒有匹配的

5、方法,那么編譯器就會(huì)發(fā)出一個(gè)警告。鑒于Objective-C 的前向機(jī)制,這并不會(huì)作為一個(gè)錯(cuò)誤。如果目標(biāo)對(duì)象是id類型,那么在編譯期就不會(huì)有警告,但是運(yùn)行期可能會(huì)有潛在的錯(cuò)誤。this , self 和 super一個(gè)消息有兩個(gè)特殊的目標(biāo)對(duì)象:self和super。self指當(dāng)前對(duì)象(類似 C+的this) , super指父對(duì)象。Objective-C 里面沒有this指針,取而代之的是 self。注意,self不是一個(gè)關(guān)鍵字。實(shí)際上,它是每個(gè)消息接收時(shí)的隱藏參數(shù),其值就是當(dāng)前對(duì)象。它的值可以被改變,這一點(diǎn)不同于C+的this指針。然而,這一點(diǎn)僅僅在構(gòu)造函數(shù)中有用。在方法中訪問實(shí)例變量同C+

6、 一樣,Objective-C在方法中也可以訪問當(dāng)前對(duì)象的實(shí)例變量。不同之處在于,C+需要使用 this- ,而 Objective-C 使用的是 self-。C+class Fooint x ;inty ;void f ( void );;void Foo : f (void )x= 1;int y ; / 隱藏 this-yy= 2; 使用局部變量ythis -y = 3; / 顯式使用成員變量 Objective-Cinterface Foo : NSObjectint x;int y;-(void ) f;endimplementation Foo-(void ) fx= 1;int

7、y; / 隱藏 this-yy= 2; /使用局部變量yself - y = 3; /顯式使用成員變量end原型的id、簽名和重載函數(shù)就是一段能夠被引用的代碼, 例如使用函數(shù)指針。 一般的, 方法名會(huì)作為引用方法的唯一id ,但是,這就需要小心有重載的情況。 C+ 和 Objective-C 使用截然不同的兩種方式去區(qū)分:前 者使用參數(shù)類型,后者使用參數(shù)標(biāo)簽。在 C+ 中,只要函數(shù)具有不同的參數(shù)類型,它們就可以具有相同的名字。 const 也可以作為一 種重載依據(jù)。C+int f ( int ) ;int f ( float ) ; / 允許, float 和 int 是不同類型 class

8、Foo public :int g ( int ) ;intg ( float); / 允許, float和 int是不同類型intg ( float) const ;/ 允許,const可以作為重載依據(jù);class Barpublic :int g ( int ) ; / 允許,我們使用的是Bar: ,而不是 Foo:在 Objective-C 中,所有的函數(shù)都是普通的 C 函數(shù),不能被重載(除非指定使用 C99 標(biāo)準(zhǔn))。方法則具有不同的語法,重載的依據(jù)是label 。Objective-Cint f ( int ) ;int f ( float) ; /interfaceFoo錯(cuò)誤! C

9、函數(shù)不允許重載NSObject-(intg :(int )x;-(intg :(floatx;/ 錯(cuò)誤!類型不同不作為重載依據(jù),同上一個(gè)沒有區(qū)別類型不同不作為重載依據(jù),同上一個(gè)沒有區(qū)別-(-(intintg :(g :(intint:(:(int ) y;float) y;/正確:兩個(gè)匿名 label錯(cuò)誤:同上一個(gè)沒有區(qū)別-(intg :(intx andY :(int )y;/-(intg :(intx andY :(floaty;/-(intg :(intx andAlsoY:( inty;正確:第二個(gè)label 是 “andY”錯(cuò)誤:同上一個(gè)沒有區(qū)別/ 正確:第二個(gè)label 是 “andAlsoY基于endlabel 的重載可以很明白地解釋方法的名字,例如:interfaceFooNSObject TOC o 1-5 h z /方法名“g”(int)g;/方法名“g: ”(int)g:(float)x;/方法名“g: ”(int)g:(float)x:( float) y;/方法名“g:andY:”(int

溫馨提示

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

評(píng)論

0/150

提交評(píng)論