转载自http://www.devdiv.com/home.php?mod=space&uid=30695&do=blog&id=6184
C++类可以使用Objective-C对象的指针作为数据成员,Objective-C类也可以有C++对象指针做实例变量。
Using C++ With Objective-C
Using C++ With Objective-C
苹果的Objective-C编译器允许用户在同一个源文件里自由地混合使用C++和Objective-C,混编后的语言叫Objective-C++。有了它,你就可以在Objective-C应用程序中使用已有的C++类库。
Objective-C和C++混编的要点
在 Objective-C++中,可以用C++代码调用方法也可以从Objective-C调用方法。在这两种语言里对象都是指针,可以在任何地方使用。例 如,C++类可以使用Objective-C对象的指针作为数据成员,Objective-C类也可以有C++对象指针做实例变量。下例说明了这一点。
注意:Xcode需要源文件以".mm"为扩展名,这样才能启动编译器的Objective-C++扩展。
正如你可以在OC接口中声明C结构一样,你也可以在OC接口中声明 C++类。跟C结构一样,OC接口中定义的 C++类是全局范围的,不是OC类的内嵌类(这与标准C(尽管不是 C++)提升嵌套结构定义为文件范围是一致的)。
为了允许你基于语言变种条件化地编写代码,O C++编译器定义了__cplusplus和__OBJC__预处理器常量,分别指定 C++和OC。 如前所述,O C++不允许 C++类继承自OC对象,也不允许OC类继承自 C++对象。
与 OC不同的是, C++对象是静态类型的,有运行时多态是特殊情况。两种语言的对象模型因此不能直接兼容。更根本的,OC和 C++对象在内存中的布局是互不 相容的,也就是说,一般不可能创建一个对象实例从两种语言的角度来看都是有效的。因此,两种类型层次结构不能被混合。
苹果的Objective-C编译器允许用户在同一个源文件里自由地混合使用C++和Objective-C,混编后的语言叫Objective-C++。有了它,你就可以在Objective-C应用程序中使用已有的C++类库。
Objective-C和C++混编的要点
在 Objective-C++中,可以用C++代码调用方法也可以从Objective-C调用方法。在这两种语言里对象都是指针,可以在任何地方使用。例 如,C++类可以使用Objective-C对象的指针作为数据成员,Objective-C类也可以有C++对象指针做实例变量。下例说明了这一点。
注意:Xcode需要源文件以".mm"为扩展名,这样才能启动编译器的Objective-C++扩展。
|
正如你可以在OC接口中声明C结构一样,你也可以在OC接口中声明 C++类。跟C结构一样,OC接口中定义的 C++类是全局范围的,不是OC类的内嵌类(这与标准C(尽管不是 C++)提升嵌套结构定义为文件范围是一致的)。
为了允许你基于语言变种条件化地编写代码,O C++编译器定义了__cplusplus和__OBJC__预处理器常量,分别指定 C++和OC。 如前所述,O C++不允许 C++类继承自OC对象,也不允许OC类继承自 C++对象。
|
与 OC不同的是, C++对象是静态类型的,有运行时多态是特殊情况。两种语言的对象模型因此不能直接兼容。更根本的,OC和 C++对象在内存中的布局是互不 相容的,也就是说,一般不可能创建一个对象实例从两种语言的角度来看都是有效的。因此,两种类型层次结构不能被混合。