明解Objective-C++中的有所為而有所不為

眾所周知Objective-C++是Objective-C和C++的混合體,源碼后綴是.mm。
在這2種語言中,對象的實質都是指針。
1、1種語言的類可以組合另一種語言的類作為成員變量。也可以互相調用。不過2種語言的類不能互相繼承。
2、因為C++對象是靜態(tài)類型的,而OC對象是動態(tài)類型的,所以二者對象不能相容。
3、又因為兩者內存布局不同,所以從結構上講二者也不兼容。
所謂不能兼容在我理解看來應該是二者的對象不能彼此類型轉換。
不過二者可以嵌套。
比如說:
1、oc類內可嵌套C++類,此時的C++就類似于全局聲明的一樣。
2、oc類內可聲明C結構。
3、在編譯器中設置fobj-call-cxx-cdtors標志位以后,oc可以以C++對象作為實例變量。
4、作為成員變量的oc對象的構造順序是按照聲明的順序順次構造的,dealloc時是逆序析構的。
5、構造器和構造函數不是一個概念。構造器好像是管理構造函數的東西。
6、oc沒有命名空間的概念,所以不能在oc類里面聲明命名空間,更不能在C++命名空間內聲明oc類。
7、oc類、協議、分類與C++ template不能在各自內部聲明。
8、oc類可以作為C++ template參數,C++template可以作為oc的消息接收者和參數。
9,C++有C++的關鍵字,oc有oc的關鍵字,你不能把C++的關鍵字用在oc身上,你也不能把oc的關鍵字用在C++身上,但是在不違背這個原則的前提下可以隨便用。
10、oc類名和類別名之所以能夠在同一個源碼中,是因為它們分別處于不同的命名空間中。
11、oc++只不過是oc與C++的混合體,而不是結合體,所以二者在此中依然是各行其道。
作者這一節(jié)寫得太爛了,舉例復雜不具代表性,說明性差,重點不突出,好像是閑言碎語的羅列,不會寫書就別寫書,別出來耽誤別人的時間!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容