C四苇、C++孝凌、Objective-C區(qū)別

歷史淵源

C的誕生

1978年,貝爾實(shí)驗(yàn)室正式發(fā)表了C語(yǔ)言月腋,后來(lái)由美國(guó)國(guó)家標(biāo)準(zhǔn)學(xué)會(huì)ANSI在此基礎(chǔ)上制定了C語(yǔ)言標(biāo)準(zhǔn)蟀架,并與1983年發(fā)布,即為ANSI C榆骚。

C++的誕生

1983年片拍,貝爾實(shí)驗(yàn)室又推出了C++。C++進(jìn)一步擴(kuò)充和完善了C語(yǔ)言妓肢。成了一種蠻像對(duì)象的程序設(shè)計(jì)語(yǔ)言穆碎。

Objective-C的誕生

它的發(fā)展主要是因?yàn)?988年Steve Jobs的NextStep采用Objective-C作為開發(fā)語(yǔ)言,因此MacOS X以及IOS上的開發(fā)最佳語(yǔ)言自然也就是Objective-C了职恳。同時(shí)Objective-C是蘋果Mac OS X 上開發(fā)的首選語(yǔ)言所禀,主要是因?yàn)镸ac OS X 技術(shù)源自NextStep的OpenStep操作系統(tǒng),因?yàn)镺PENSTEP的軟件架構(gòu)(framework)都是用Objetive-C 寫成放钦。然后OC是由Brad Cox在80年代初在第一個(gè)純面向?qū)ο笳Z(yǔ)言Smalltalk基礎(chǔ)上寫成色徘。Brod Cox創(chuàng)立了StepStone公司進(jìn)行OC語(yǔ)言的推廣。最終OC在1992年獲得了GNU gcc編譯器的支持操禀,因此OC也是GNUstep在Linux和其他平臺(tái)上的開發(fā)語(yǔ)言(GNUstep是什么褂策,可以參考其官方網(wǎng)頁(yè)http://www.gnustep.org/)。

語(yǔ)言特點(diǎn)

C:

  1. 作為一種結(jié)構(gòu)化語(yǔ)言颓屑、層次清晰斤寂,便于按模塊化方式組織程序,易于調(diào)試和維護(hù)揪惦;
  2. 表現(xiàn)能力和處理能力極強(qiáng)遍搞。可以直接訪問(wèn)內(nèi)存的物理地址器腋,進(jìn)行位(bit)一級(jí)的操作溪猿;
  3. C語(yǔ)言實(shí)現(xiàn)了對(duì)硬件的編程操作,因?yàn)镃語(yǔ)言集高級(jí)語(yǔ)言和低級(jí)語(yǔ)言的功能于一體即可以用于系統(tǒng)軟件的開發(fā)纫塌,也適用于應(yīng)用軟件的開發(fā)诊县;
  4. C語(yǔ)言還有效率高,可移植性強(qiáng)等特點(diǎn)措左。因此廣泛地移植到了各類型計(jì)算機(jī)上依痊,從而形成了多種版本的C語(yǔ)言。(主要為演進(jìn)成了后來(lái)的C++)

C++:

  1. 在C的基礎(chǔ)上進(jìn)行了擴(kuò)展和完善怎披,使C++兼容了C語(yǔ)言的面向過(guò)程特點(diǎn)胸嘁,又成了一種面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言。
  2. 可以使用抽象數(shù)據(jù)類型進(jìn)行基于對(duì)象的編程钳枕。
  3. 可以使用多繼承缴渊、多態(tài)進(jìn)行面向?qū)ο蟮木幊獭?/li>
  4. 可以擔(dān)負(fù)起以模板為特征的泛型化編程

Objective-C:(OC )

  1. OC是C的超集,擴(kuò)展了C語(yǔ)言使它具備面向?qū)ο笤O(shè)計(jì)的能力鱼炒。例如類衔沼、消息、繼承昔瞧;同時(shí)在OC的代碼中可以有C和C++語(yǔ)句指蚁,它可以調(diào)用C的函數(shù),也可以通過(guò)C++對(duì)象訪問(wèn)方法自晰;
  2. OC不同于C++,盡管都有面向?qū)ο蟮哪芰δ麄兎謱俨煌膶W(xué)派,OC屬于SmallTalk學(xué)派酬荞,C++屬于Simula 67學(xué)派(一種早期的面向?qū)ο笳Z(yǔ)言)搓劫。
  3. OC可以底層系統(tǒng)編程瞧哟,另一方面可以支持利用動(dòng)態(tài)架構(gòu)進(jìn)行開發(fā)。

OC于C++的比較:

兩者都是面向?qū)ο笤O(shè)計(jì)語(yǔ)言枪向,有很多相似之處勤揩,但屬于不同的學(xué)派,也有不同之處:

  1. 繼承:OC不支持多繼承秘蛔,C++支持多繼承
  2. 函數(shù)調(diào)用:OC通過(guò)傳遞消息實(shí)現(xiàn)函數(shù)調(diào)用陨亡,而C++直接進(jìn)行函數(shù)調(diào)用
  3. 定型:OC是動(dòng)態(tài)定型,所以它的類庫(kù)比C++容易操作深员。OC在運(yùn)行時(shí)可以允許根據(jù)字符串名字來(lái)訪問(wèn)方法和類负蠕,還可以動(dòng)態(tài)連接和添加類。而C++倦畅,對(duì)象的靜態(tài)類型決定你是否可以發(fā)消息給它遮糖。
  4. 接口:OC采用協(xié)議(正式和非正式)的形式來(lái)定義接口,而C++采用虛函數(shù)的形式來(lái)定義接口
  5. 方法重載:OC不支持方法重載滔迈,C++支持方法重載。方法重載就是方法名相同燎悍,參數(shù)個(gè)數(shù)相同敬惦,但是參數(shù)類型不同或者返回值類型不同谈山。

兩者的主要差別是因?yàn)镺C既支持動(dòng)態(tài)類型也支持靜態(tài)類型。對(duì)于id類型的變量奏路,變量只是一個(gè)容器畴椰,本身是沒(méi)有類型的,或者知識(shí)屬于最基本的類型鸽粉,所以也不需要強(qiáng)制類型轉(zhuǎn)換斜脂。因?yàn)榫幾g器不會(huì)對(duì)檢查變量類型是否正確,只是運(yùn)行時(shí)如果類型不正確會(huì)才會(huì)產(chǎn)生異常触机。

而C++是靜態(tài)語(yǔ)言帚戳,編譯時(shí)會(huì)檢查類型,所以必須要加上強(qiáng)制類型轉(zhuǎn)換儡首,否則編譯器就會(huì)報(bào)錯(cuò)片任。

編譯時(shí)的不同

OC:雖然Objective-C具備動(dòng)態(tài)類型的能力,但編譯期的靜態(tài)類型檢查依舊可以應(yīng)用到變量上蔬胯。附加的類型信息讓編譯器在編譯時(shí)可以檢查變量類型对供,并對(duì)類型不符的變量提出警告。

C++: 編譯要求嚴(yán)格

OC如何實(shí)現(xiàn)多繼承

Objective-C在NeXT時(shí)期曾經(jīng)試圖引入多重繼承的概念氛濒,但由于協(xié)議的出現(xiàn)而沒(méi)有實(shí)現(xiàn)之产场。

協(xié)議類似于JavaC#語(yǔ)言中的“接口”鹅髓。在Objective-C中,有兩種定義協(xié)議的方式:由編譯器保證的“正式協(xié)議”京景,以及為特定目的設(shè)定的“非正式協(xié)議”迈勋。

非正式協(xié)議為一個(gè)可以選擇性實(shí)現(xiàn)的一系列方法列表。非正式協(xié)議雖名為協(xié)議醋粟,但實(shí)際上是掛于NSObject上的未實(shí)現(xiàn)分類(Unimplemented Category)的一種稱謂,Objetive-C語(yǔ)言機(jī)制上并沒(méi)有非正式協(xié)議這種東西重归,OSX 10.6版本之后由于引入@optional關(guān)鍵字米愿,使得正式協(xié)議已具備同樣的能力,所以非正式協(xié)議已經(jīng)被廢棄不再使用鼻吮。

正式協(xié)議類似于Java中的"接口"育苟,它是一系列方法的列表,任何類都可以聲明自身實(shí)現(xiàn)了某個(gè)協(xié)議椎木。在Objective-C 2.0之前违柏,一個(gè)類必須實(shí)現(xiàn)它聲明匹配的協(xié)議中的所有方法,否則編譯器會(huì)報(bào)告錯(cuò)誤香椎,表明這個(gè)類沒(méi)有實(shí)現(xiàn)它聲明匹配的協(xié)議中的全部方法漱竖。Objective-C 2.0版本允許標(biāo)記協(xié)議中某些方法為可選的(Optional),這樣編譯器就不會(huì)強(qiáng)制實(shí)現(xiàn)這些可選的方法畜伐。

常用的有使用協(xié)議和類別實(shí)現(xiàn)多繼承馍惹。

OC中可以使用以下方式實(shí)現(xiàn)多繼承:

  1. 協(xié)議
  2. 類別
  3. 消息轉(zhuǎn)發(fā)
  4. 強(qiáng)制轉(zhuǎn)換
  5. 組合模式

深入剖析 iOS 編譯 Clang LLVM

參考資料:

http://blog.csdn.net/dqjyong/article/details/7663866

https://zh.wikipedia.org/wiki/Objective-C

http://www.reibang.com/p/d9b213af4d8a

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市玛界,隨后出現(xiàn)的幾起案子万矾,更是在濱河造成了極大的恐慌,老刑警劉巖慎框,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件良狈,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡笨枯,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門窥突,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)阻问,“玉大人沦疾,你說(shuō)我怎么就攤上這事第队∨俑眩” “怎么了?”我有些...
    開封第一講書人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵尸执,是天一觀的道長(zhǎng)缓醋。 經(jīng)常有香客問(wèn)我,道長(zhǎng)褪贵,這世上最難降的妖魔是什么抗俄? 我笑而不...
    開封第一講書人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮槽卫,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘晒夹。我一直安慰自己姊氓,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開白布读跷。 她就那樣靜靜地躺著禾唁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪丐枉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,624評(píng)論 1 305
  • 那天瘦锹,我揣著相機(jī)與錄音弯院,去河邊找鬼。 笑死颂碘,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的头岔。 我是一名探鬼主播鼠证,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼名惩,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼孕荠!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起弯予,我...
    開封第一講書人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤锈嫩,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后呼寸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體猴贰,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年瑟捣,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了迈套。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片碱鳞。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖芙扎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情俏橘,我是刑警寧澤,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布寥掐,位于F島的核電站召耘,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏污它。R本人自食惡果不足惜庶弃,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望固惯。 院中可真熱鬧缴守,春花似錦、人聲如沸屡穗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至源祈,卻和暖如春色迂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背歇僧。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工锋拖, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留兽埃,地道東北人适袜。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像售貌,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子颂跨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容