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

羅朝輝(飄飄白云)

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

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

Objective-C 與 C++ 的異同

羅朝輝(http://m.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 羅朝輝 閱讀(10540) 評論(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>
            亚洲激情在线观看视频免费| 一个色综合导航| 久久人人看视频| 玖玖视频精品| 欧美电影美腿模特1979在线看| 久久这里有精品15一区二区三区| 久久久精品网| 欧美日本高清视频| 国产精品网站在线| 影音先锋久久| 中日韩在线视频| 久久免费国产精品| 亚洲精选一区| 午夜精品久久久久久久久久久久久 | 亚洲精品视频一区二区三区| 亚洲欧洲一区二区三区| 亚洲专区欧美专区| 另类图片综合电影| 国产精品乱人伦中文| 伊人精品在线| 午夜视黄欧洲亚洲| 欧美好吊妞视频| 午夜精品久久久久久99热| 久久综合国产精品台湾中文娱乐网| 欧美日韩欧美一区二区| 欧美精品一区二区三区久久久竹菊| 欧美三级午夜理伦三级中文幕 | 国产真实久久| 夜夜爽99久久国产综合精品女不卡 | 久久免费精品日本久久中文字幕| 欧美精品一区二区视频| 国产午夜精品美女视频明星a级| 亚洲精品一区二区三区福利| 久久福利精品| 宅男噜噜噜66一区二区66| 蜜乳av另类精品一区二区| 国产日韩av高清| 亚洲一区中文| 亚洲精品一区久久久久久 | 欧美午夜精品理论片a级大开眼界| 在线成人免费视频| 久久精品视频在线免费观看| 99视频精品全部免费在线| 久久综合久久久| 激情视频一区二区三区| 欧美在线视频二区| 亚洲一区精品电影| 国产精品成av人在线视午夜片| 亚洲精品国产拍免费91在线| 久久中文在线| 久久久久久高潮国产精品视| 国内精品国语自产拍在线观看| 午夜精品久久久99热福利| 一本色道久久88亚洲综合88| 欧美理论片在线观看| 亚洲理伦在线| 亚洲免费成人av电影| 欧美日韩精品久久久| 亚洲无毛电影| 亚洲在线国产日韩欧美| 国产欧美日韩在线| 久久久久久久一区二区| 久久精品国产在热久久 | 国产精品视频| 日韩午夜剧场| 99视频精品在线| 国产精品视频一区二区高潮| 午夜精品久久久久久久久久久 | 一区二区欧美在线| 欧美日韩亚洲在线| 午夜国产精品视频| 久久国产欧美| 亚洲经典一区| 一区二区三区导航| 国产尤物精品| 亚洲精品1234| 午夜在线不卡| 一本色道久久88精品综合| 欧美特黄a级高清免费大片a级| 亚洲特黄一级片| 欧美一区二区在线视频| 亚洲高清在线视频| 亚洲美女精品久久| 国产精品视频久久一区| 久久亚洲色图| 欧美日韩高清在线一区| 欧美在线亚洲综合一区| 久久嫩草精品久久久久| 一区二区三区精品视频| 欧美在线一级va免费观看| 亚洲精品日产精品乱码不卡| 亚洲网站在线观看| 亚洲国产va精品久久久不卡综合| 亚洲免费高清| 亚洲激情av| 午夜在线一区二区| 日韩小视频在线观看| 欧美一区二区在线播放| 亚洲四色影视在线观看| 麻豆精品在线观看| 久久精品中文| 欧美性猛交xxxx乱大交退制版| 欧美α欧美αv大片| 国产精品手机视频| 亚洲精选91| 亚洲精品一区二区网址| 欧美一级黄色网| 亚洲曰本av电影| 欧美日韩国产二区| 欧美成人午夜激情| 国产综合视频在线观看| 亚洲一区二区三区四区五区午夜 | 亚洲免费在线播放| 欧美大片一区二区三区| 久久人人精品| 国产老女人精品毛片久久| 亚洲精品乱码久久久久久按摩观| 国产美女精品视频| 99re6这里只有精品| 亚洲激情视频在线观看| 久久久欧美精品| 久久久久中文| 国产亚洲精品自拍| 在线性视频日韩欧美| 亚洲视频综合在线| 欧美日韩一区二区在线播放| 亚洲高清视频在线| 亚洲激情精品| 欧美成人伊人久久综合网| 欧美a级在线| 亚洲高清一区二| 麻豆精品在线播放| 亚洲国产欧美在线人成| 亚洲激情女人| 欧美精品亚洲精品| 99在线|亚洲一区二区| 一本在线高清不卡dvd| 欧美三日本三级少妇三2023| 日韩视频精品| 午夜天堂精品久久久久| 日韩天堂在线观看| 欧美二区视频| 亚洲精品男同| 亚洲精选中文字幕| 欧美日韩国产一区精品一区 | 欧美午夜不卡影院在线观看完整版免费| 亚洲第一精品夜夜躁人人爽 | 国产日产精品一区二区三区四区的观看方式| 亚洲视频一区二区免费在线观看| 亚洲在线中文字幕| 国产亚洲一区二区三区在线播放| 亚洲欧美卡通另类91av| 久久久久国内| 亚洲精品日韩在线| 欧美午夜一区| 久久精品国产欧美亚洲人人爽| 免费亚洲电影在线| 日韩午夜免费| 国产欧美在线播放| 久久综合久久久| 一区二区精品在线观看| 久久精品国产亚洲一区二区三区 | 欧美jizzhd精品欧美喷水 | 欧美成人精品1314www| 日韩视频免费在线| 久久激情网站| av不卡在线| 国内成人自拍视频| 欧美日韩调教| 久久久久一区二区三区| 日韩亚洲国产精品| 久久综合五月| 午夜国产精品视频| 亚洲精品久久久久久久久久久久久| 国产精品国内视频| 欧美大片第1页| 久久国产精品久久久| 一本久久a久久精品亚洲| 免费日韩av片| 欧美在线短视频| 在线亚洲观看| 最近看过的日韩成人| 国产日本欧洲亚洲| 欧美天天在线| 欧美激情精品久久久久久| 欧美一级片久久久久久久 | 女同性一区二区三区人了人一 | 久久先锋资源| 午夜精品久久久久久久99水蜜桃| 亚洲国产欧美一区| 欧美69视频| 久久精品一区蜜桃臀影院| 亚洲小说欧美另类社区| 亚洲欧洲日本mm| 永久免费精品影视网站| 国产日韩欧美三级| 国产嫩草一区二区三区在线观看| 欧美日韩和欧美的一区二区| 免费在线欧美黄色| 美女视频一区免费观看|