众所周知Objective-C++是Objective-C和C++的混合体,源码后缀是.mm。
在这2种语言中,对象的实质都是指针。
1、1种语言的类可以组合另一种语言的类作为成员变量。也可以互相调用。不过2种语言的类不能互相继承。
2、因为C++对象是静态类型的,而OC对象是动态类型的,所以二者对象不能相容。
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++的混合体,而不是结合体,所以二者在此中依然是各行其道。
作者这一节写得太烂了,举例复杂不具代表性,说明性差,重点不突出,好像是闲言碎语的罗列,不会写书就别写书,别出来耽误别人的时间!
明解Objective-C++中的有所为而有所不为
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 面试笔试都是必考语法知识的。请认真复习和深入研究OC。 Objective-C 方法和选择器有何不同?(Diffe...
- 苹果官方文档翻译 《Objective-C语言编程》(Programming with Objective-C) ...