日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

Object-C 与C/C++的区别

發布時間:2023/12/14 c/c++ 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Object-C 与C/C++的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

雖然很多地方都說Object C 是是C的超集,"Objective-C is a general-purpose, object-oriented programming language that adds Smalltalk-style messaging to the C programming language.?" 但是,在基本的語法和一些實現上還是有一定的區別的,本文是從工作中遇到的不同的部分整理如下:

1)Object C 的類只能繼承一個類,不能繼承多個類,如果要實現類似多個繼承,需要使用Category和Extension, Extension是沒有名字的Category,也就是匿名Category。

2)Object C從2011年引入了?Automatic Reference Counting (ARC),支持垃圾收集,不需要擔心內存泄露的問題;而C++依然不支持,需要自己手工管理內存。

3) Object 不支持運算符重載,而C++支持;

4) 保留的關鍵字不一樣;Object C:?weak?NSObject?NSInteger?NSNumber等;

5)Object C有block的概念,如下代碼:

double (^multiplyTwoValues)(double, double) = ^(double firstValue, double secondValue) {return firstValue * secondValue;};double result = multiplyTwoValues(2,4); NSLog(@"The result is %f", result);

感覺和C的函數指針差不多。

6)Object C 和 C/C++都有 指針的概念,但是,指針的使用卻不同。

例如:?

Object C:

Box *box1 = [[Box alloc]init];

box1.height = 5;

C、C++:

Box *box1 = new Box();

box1->height = 5;

7) Object 有?Protocol,C/C++沒有。Protocol的定義是:?Objective-C allows you to define protocols, which declare the methods expected to be used for a particular situation. Protocols are implemented in the classes conforming to the protocol

8)Object C的for語句,支持Fast enumeration Syntax,而C語言不支持

for (classType variable in collectionObject ) { statements }

9) Object 不支持命名空間,而C/C++支持命名空間。

10)Object C 的類需要聲明init函數初始化對象和dealloc釋放對象,沒有構造函數和析構函數;而C++通過構造函數初始化對象,析構函數釋放;

11) Object C雖然也支持泛型,但是一般不建議使用,會影響效率;而C++的STL、Boost則大量使用了泛型;

12) Object C初始化指針為空使用nil;C、C++使用NULL;

13) Object C沒有虛擬繼承;而C++有虛擬繼承;

14) Object C由于不支持命名空間,所以,編譯之后沒有將類名mangle,經過查看bitcode,發現其實函數名也沒有mangle;C、C++編譯之后會把類和函數名字mangle;關于Name Mangling可以參考:https://en.wikipedia.org/wiki/Name_mangling#Demangle_via_c++filt

實際操作環境:XCode 11.4.1 & apple clange 11.0.3

15) Object C 類的成員函數調用使用的是消息機制,即使用指令objc_msgSend發送一個消息給指定的類和函數;而C、C++是直接調用mangle之后的函數名。關于demangle可以參考:https://github.com/gimli-rs/cpp_demangle。

16) Object C 類本身使用self,C++使用this;

17)? Object C 對于類型不確定的對象可以使用id表示,C、C++使用Void *;

18)?Object C 使用YES/NO表示TRUE/FALSE,

19)?Object C 使用#import引入其他文件,#import 確定一個文 件只能被導入一次;C、C++使用#include,并且無法去報一個文件不會被導入一次,因此需要在頭文件中使用宏控制;

20) Object C支持反射機制,C、C++不支持

21) Object C中只有數據成員的訪問限制,沒有方法的訪問限制;C、C++數據成員和方法都有訪問控制(public、protected和private)。

22)?Object C沒有靜態變量,有全局變量;C、C++兩者都支持

23)? Object C中的數組NSArray 可以保存不同類型的變量,而C++不可以;

24) Object C所有的類都必須繼承于 NSObject;而C++對自定義的類的基類沒有要求;

25)?Objective C 提供了運行期動態綁定機制, 而 C++ 是編譯時靜態綁定;

?

后面遇到會持續更新......

? ? ? ?

參考:

https://www.tutorialspoint.com/objective_c/objective_c_quick_guide.htm

http://cocoadevcentral.com/d/learn_objectivec/

總結

以上是生活随笔為你收集整理的Object-C 与C/C++的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。