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

众所周知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++的混合体,而不是结合体,所以二者在此中依然是各行其道。
作者这一节写得太烂了,举例复杂不具代表性,说明性差,重点不突出,好像是闲言碎语的罗列,不会写书就别写书,别出来耽误别人的时间!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容