青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

羅朝輝(飄飄白云)

關注嵌入式操作系統,移動平臺,圖形開發。-->加微博 ^_^

  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
  85 隨筆 :: 0 文章 :: 169 評論 :: 0 Trackbacks

Objective-C 與 C++ 的異同

羅朝輝(http://www.shnenglu.com/kesalin

轉載請注明出處


stackflow 上有同學提問"C++ 與 Objective-C 有什么異同?"樓下的提供的兩個資料挺不錯的.


其一是: Pierre Chatelier 寫的 <From C++ to Objective-C version 2.1 en>

下載鏈接:http://pierre.chachatelier.fr/programmation/fichiers/cpp-objc-en.pdf


其二便是: Michael Rutman 寫的 C++ Versus Objective-C:

鏈接:http://www.mactech.com/articles/mactech/Vol.13/13.03/CandObjectiveCCompared/


下面總結一下 Objective-C 與 C++ 的區別:


1, 兩者最大的相同便是: 都是從 C 演化而來的面向對象語言, 兩者都兼容標準 C 語言.


2, 兩者最大的不同便是: Objective C 是完全動態的,而 C++是部分動態的。
Objective C 支持在運行時動態類型決議(dynamic typing),動態綁定(dynamic binding)以及動態裝載(dynamic loading);
C++ 是編譯時靜態綁定,通過嵌入類(多重繼承)和虛函數(虛表)來模擬實現。
Objective C 在語言層次上支持動態消息轉發,其消息發送語法為 [object function]; 而且C++ 為 object->function()。 兩者的語義也不同,在 Objective C 里是說發送消息到一個對象上,至于這個對象能不能響應消息以及是響應還是轉發消息都不會 crash; 而在 C++ 里是說對象進行了某個操作,如果對象沒有這個操作的話,要么編譯會報錯(靜態綁定),要么程序會 crash 掉的(動態綁定)。


3, Objective C 不支持多重繼承, 而 C++ 支持。 不過 Objective C 通過 proxy(代理) 或 Category(類別) 可以更優雅地實現這一特性。這一點也包括了 overwriting(覆蓋) 和 overloading(重載) 兩者的不同。Objective C 不支持函數重載。


4, 函數名字解析也不同,Objective C 的函數名字解析是函數名稱 + 參數名稱的, 而 C++ 只包括函數名稱。 因此在 Objective C 中以下是合法的,因為兩者解析出來分別類似于 foo:bar1: 和 foo:bar2: 是不同的:

-(int)foo:(int) bar bar1:(int)bar;

-(char*)foo:(int) bar bar2:(int)bar;

而在 C++ 中以下是非法的, 編譯將出錯, 因為兩者解析出來都是類似于 foo:int, 編譯器無法辨別:

int foo(int bar, int bar1);

char* foo(int bar, int bar2);


5, Objective-C 沒有 C++ 里有的構造函數和析構函數 其對應物為 alloc-init/dealloc;


6, Objective-C 2.0 了加入了垃圾回收機制(在 iPhone 和 iPad 上不可用) 而 C++ 沒有;


7, Objective-C 不允許在 Stack 上分配內存,只能在 heap 上進行,而 C++ 兩者都允許;


8, Objective-C 不支持模板而 C++ 支持;Objective-C 不支持命名空間,而 C++ 支持;Objective-C 也不支持函數缺省默認參數,而 C++ 支持;


10, Objective-C 是 Smalltalk 系的 而 C++ 是 Simula 系的。


可以這么說 Objective-C 在 C 之上進行了一層簡潔的包裝, 而 C++ 在 C++ 之上進行了復雜的包裝, 但 Objective-C 讓人感覺更優雅簡潔。


posted on 2010-12-26 12:30 羅朝輝 閱讀(10530) 評論(7)  編輯 收藏 引用 所屬分類: 移動開發Cocoa 開發

評論

# re: Objective-C 與 C++ 的異同 2010-12-26 17:07 wu
-(int)foo:(int) bar1;
-(char*)foo:(int) bar2;

這兩個是不同的嗎?  回復  更多評論
  

# re: Objective-C 與 C++ 的異同 2010-12-27 09:53 rix
又見overwriting(覆蓋) 和 overloading(重載),記得上一次看到是別人翻譯國外的一篇文章看到的。國內很多人似乎一直把這兩個混為一談  回復  更多評論
  

# re: 【Apple】Objective-C 與 C++ 的異同 2011-06-09 22:42 羅朝輝
@wu

這兩個是相同的,以下兩個是不同的,原文中舉例不當,已經修改過來了。

-(int)foo:(int) bar bar1:(int)bar;
-(char*)foo:(int) bar bar2:(int)bar;  回復  更多評論
  

# re: 【Apple】Objective-C 與 C++ 的異同 2011-06-24 17:55 D
@rix
Objective-c是可以overwriting現有class的一些selector的(不用生成新的class),C++貌似不行,除非繼承 :)  回復  更多評論
  

# re: 【Apple】Objective-C 與 C++ 的異同 2011-08-30 04:18
沒用過Objective C,不了解你說的overwriting,不過你把overloading和overriding已經給搞混了,看看你自己寫的或者轉貼的其它文章就知道了。

另外你對優雅的理解很膚淺。若以C為標準,無論是調用還是消息不過是語法糖罷了。不是說只能以C為標準,很多人(尤其是喜歡玩各種語言的)在這個問題上不理解,覺得動輒說C的都是只會C的菜鳥,其實真正有實踐經驗的就知道,二進制接口才是絕對的王,而現在最通用的二進制接口是C接口。而在接口背后,沒有壓根沒有什么優雅不優雅的問題,只有基于需求的考慮外加口味問題。

而C++提供的模板則并非僅僅是糖,而是一種在保證約束的情況下進行的編譯期自動化代碼生成機制。這是一種質的不同。當然C++在語法糖相關的部分做的不是太到位,比如lambda是stateless的不能攜帶閉包等等,但最讓人頭痛的其實還是最終到C接口的轉換所造成的工作量;倒不是說有多大,而是說這些都是無聊的繁文縟節。從根本上是因為C++的糖不是整體考慮的、而是一塊一塊粘起來的。

任何語言要想真正超越C++,需要的是運行期或運行前、編譯后這個“期”進行代碼自動生成的機制。這個.NET做了一部分,但出于M$的動機和大公司的局限性,也很不到位(甚至.NET下除了C++/CLI連編譯期生成都是缺少要素的,比如特化等等)。

不是語言承載現實中的任務和項目,恰恰相反是現實中的任務和項目承載語言,因為無論是自然語言還是編程語言,它最大的價值來自于使用。所以雖然我也曾經很fan“優雅”一類的形容詞,現在卻很明白,誰說這些詞,誰就是偏離了真正的航道,他們(至少在語言評價方面的)觀點就不值一提。

不過,語言的缺陷確實真實的存在,但缺陷不是比較出來的,而是真正的設計缺陷,比如python 2.x中變量的作用域。恩又廢話了,匿了。  回復  更多評論
  

# re: 【Apple】Objective-C 與 C++ 的異同 2011-08-30 13:39 羅朝輝
@呃

誠然,我是筆誤了,將 overriding(重載) 寫成 overwrting(重寫,覆蓋),但是沒有將它們搞混:
override 一般是子類重寫(覆蓋)父類的方法,以實現與父類不同的行為;
overload 是重載,一般是用于在一個類里面實現若干同名但參數形式不同的重載方法,

我明白你的境地,C, C++, Obj-C 三種相比,C 無疑是最簡潔,運行效率最高的;C++ 無疑是最復雜也很強大的;Obj-C 最優雅的,沒有C++ 的復雜難以掌握,但也足夠簡潔高效,最重要的是易學易用。

都說學 C/C++ 的必有三個境界,C入門,唯C++,回歸 C。但是在這后不妨再去了解了解其他的語言,Obj-C或動態語言。jjHou 總結過 C++ 就像是個熔爐,包括四種編程范式在里面。至于你說的模版并非僅僅是一直自動代碼生成機制,它是完備的范型編程范式。

我不想在這里比較語言的優劣,也不想詳談 C++的大而全,復雜易誤用等。C++ 以打補丁的形式增加了很多語法糖,無論是它的過去還是現在都說不上優雅。語言只是一種工具而已,在同樣的應用環境下,哪一種語言能被更快,更容易地掌握,應用,推廣,能讓編程者所想即可所用,就足以證明它是優雅的。

你不妨去了解一下 Obj-C,討論也需要有些背景知識的。

  回復  更多評論
  

# re: [Cocoa]Objective-C 與 C++ 的異同[未登錄] 2012-06-16 01:33 1
至于這個對象能不能響應消息以及是響應還是轉發消息都不會 crash

我看很多這么說,而實際呢,如果因為筆誤寫錯一個方法調用立刻crash.  回復  更多評論
  

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久精视频免费在线久久完整在线看| 玖玖玖国产精品| 亚洲激情第一区| 欧美在线关看| 亚洲国产99精品国自产| 久久视频在线看| 久久九九久久九九| 黄色一区二区三区四区| 久久亚洲欧美国产精品乐播| 久久aⅴ国产紧身牛仔裤| 国产一区日韩一区| 欧美成人r级一区二区三区| 久久久亚洲国产美女国产盗摄| 国模精品一区二区三区色天香| 久久久水蜜桃| 免费成人黄色片| 亚洲另类在线视频| 亚洲天堂av电影| 国产无一区二区| 免费在线成人| 欧美日韩国产黄| 欧美亚洲免费在线| 久久免费视频在线观看| 亚洲精品永久免费| 亚洲一区三区在线观看| 精品成人一区| 亚洲精品乱码久久久久久蜜桃91| 国产精品乱子乱xxxx| 久久一区亚洲| 欧美日韩亚洲一区二区三区在线| 欧美一区二区三区男人的天堂| 久久国产欧美日韩精品| 日韩视频免费在线| 午夜久久99| 99视频日韩| 久久国产色av| 亚洲午夜羞羞片| 久久久中精品2020中文| 亚洲一区二区三区午夜| 久久在线91| 欧美亚洲系列| 另类天堂av| 欧美午夜美女看片| 欧美激情91| 国产区二精品视| 日韩午夜av在线| 亚洲国产精品久久久久婷婷884| 一本到12不卡视频在线dvd| 亚洲第一页在线| 午夜一级久久| 亚洲综合日韩| 欧美另类综合| 男人的天堂亚洲在线| 国产无遮挡一区二区三区毛片日本| 亚洲精品免费在线播放| 尤物精品在线| 欧美怡红院视频| 香蕉精品999视频一区二区| 欧美日本乱大交xxxxx| 欧美成人精品影院| 影音先锋中文字幕一区| 性欧美长视频| 欧美有码视频| 国产亚洲欧美另类一区二区三区| 9久re热视频在线精品| 日韩视频一区二区在线观看| 欧美暴力喷水在线| 欧美成人午夜免费视在线看片 | 91久久精品网| 久久久噜噜噜久久中文字免| 欧美影院午夜播放| 国产视频久久久久| 欧美一区二区三区免费视频| 欧美亚洲日本国产| 国产婷婷色一区二区三区四区| 亚洲一级电影| 欧美在线黄色| 国产一区二区三区免费在线观看| 午夜视频一区| 久久久夜色精品亚洲| 国产在线乱码一区二区三区| 久久久久.com| 欧美激情一区二区三区在线视频观看| 在线精品国产欧美| 欧美国产视频日韩| 亚洲毛片一区二区| 亚洲一区三区视频在线观看| 国产精品色网| 久久国产高清| 亚洲第一页在线| 亚洲天堂黄色| 国产视频一区二区三区在线观看| 欧美一区二区三区在线观看视频 | 国产精品毛片大码女人| 亚洲一区视频在线| 久久久亚洲高清| 亚洲激情中文1区| 欧美午夜在线视频| 午夜欧美理论片| 欧美凹凸一区二区三区视频| 一本久久综合亚洲鲁鲁| 国产精品夜色7777狼人| 久久久人成影片一区二区三区| 欧美国产一区二区| 亚洲自拍三区| 136国产福利精品导航网址应用| 欧美成人黑人xx视频免费观看| 一区二区三区久久| 欧美一区2区三区4区公司二百| 91久久精品国产91性色| 亚洲免费中文字幕| 亚洲第一精品久久忘忧草社区| 欧美日韩午夜剧场| 久久久久一区二区| 一区二区高清视频| 久久综合久久综合久久| 亚洲无毛电影| 尤物九九久久国产精品的分类| 欧美日韩亚洲一区二| 久久手机精品视频| 亚洲一区在线观看免费观看电影高清 | 嫩草影视亚洲| 亚洲免费网址| 亚洲激情av在线| 国产亚洲欧美在线| 欧美色一级片| 久久中文字幕导航| 欧美一区二区三区视频在线观看| 亚洲精品欧美日韩| 欧美国产91| 久久理论片午夜琪琪电影网| 香蕉视频成人在线观看| 亚洲九九精品| 亚洲高清不卡一区| 黄色av成人| 国产一区二区三区的电影| 欧美日本一区二区三区| 蜜臀av性久久久久蜜臀aⅴ| 欧美一区二区三区在线免费观看| 一区二区久久久久久| 亚洲经典一区| 亚洲丶国产丶欧美一区二区三区| 久久人人爽爽爽人久久久| 久久精品一二三区| 欧美亚洲视频一区二区| 欧美亚洲综合久久| 亚洲欧美在线aaa| 亚洲一区二区三区久久| 亚洲一区二区三| 欧美中日韩免费视频| 国产精品99久久久久久久久| 99热这里只有成人精品国产| 亚洲级视频在线观看免费1级| 亚洲国产精品成人综合| 91久久久亚洲精品| 亚洲裸体在线观看| 亚洲美女视频在线观看| 亚洲免费黄色| 亚洲私人黄色宅男| 午夜在线一区二区| 欧美一区二区| 久久综合九色欧美综合狠狠| 美女久久网站| 亚洲国产裸拍裸体视频在线观看乱了中文| 免费观看久久久4p| 亚洲高清免费| 日韩亚洲欧美精品| 亚洲欧美日韩一区| 欧美中文字幕在线| 免费高清在线视频一区·| 欧美二区乱c少妇| 欧美日韩国产一区| 国产精品亚洲综合| 亚洲国产精品国自产拍av秋霞| 日韩视频亚洲视频| 久久国产福利国产秒拍| 久久综合五月天婷婷伊人| 欧美国产成人精品| 日韩视频免费观看高清在线视频| 亚洲天堂偷拍| 老牛国产精品一区的观看方式| 欧美美女操人视频| 国产午夜精品全部视频播放 | 国产日韩欧美另类| 午夜亚洲福利在线老司机| 亚洲丁香婷深爱综合| 亚洲性线免费观看视频成熟| 欧美色欧美亚洲另类二区| 午夜免费在线观看精品视频| 午夜精品成人在线| 黄色综合网站| 久久一区二区三区超碰国产精品| 欧美韩国日本一区| 99热在这里有精品免费| 国产欧美日韩精品在线| 亚洲午夜一区| 99国产精品久久久久久久久久| 亚洲欧洲一级| 欧美韩日高清| 亚洲欧美日韩国产综合|