C++、Objective-C和Objective-C++有什么区别?

13

我想了解C++、Objective-C以及Objective-C++之间的区别。请问有人能告诉我这些语言的不同之处吗?同时,我们能否在iPhone开发中使用C++呢?

谢谢, Madan Mohan


Objective-C++?!我从未听说过。纯C++本身就是面向对象的,所以我不明白为什么需要Obj-C++存在。如果我错了,请纠正我。 - rhino
10
Objective-C++ 简单来说就是在 Objective-C (和其框架)中加入了 C++ 代码。纯 C++ 并不是面向对象的,而 Objective-C++ 则是。 - BoltClock
2
@BoltClock:客观和面向对象编程有什么区别? - RK-
1
@Krishnan:我认为这里的“objective”只是Objective-C名称的一部分,本身并没有特别的含义。 - BoltClock
1
@BoldClock:区别在于Objective-C是动态类型,而C++是静态类型。而Objective-C++则两者兼备。 - Martin
4个回答

27

C++是Bjarne Stroustroup的语言,基于在C中添加类和元编程的方式,将大部分额外工作放入编译器,并依赖于最少的运行时工作。

Objective-C是Brad Cox的语言,基于在C中添加SmallTalk风格的动态消息传递运行时库,以及一小部分语法添加,使其更易于使用。

简而言之,Objective-C++是将Objective-C运行时和语法添加到C++中得到的结果。它有其局限性(例如,您不能创建C++类的Objective-C子类或反之亦然,而Objective-C不喜欢C++命名空间),但允许您从Objective-C对象中使用C++类,反之亦然。

您可以在iPhone开发中使用Objective-C++。这实际上意味着您可以编写一个完全基于C++的应用程序对象模型,其中控制器层需要与Objective-C接口才能使用Cocoa Touch API。


3
我会尽力为您翻译:我还要补充一点,Objective-C 是 C 语言的 严格 超集,而 C++ 不是。https://secure.wikimedia.org/wikipedia/en/wiki/Compatibility_of_C_and_C%2B%2B - Stephen Furlani
2
Objective-C++是一种很好的方式,可以利用STL模板,如vector和map,而在Cocoa中没有好的、低成本的类似物。 - westsider
可以提供包含Objective-C和C++的任何示例代码。 - Madan Mohan
@Madan,请查看CATCH中的ObjC集成代码。https://github.com/philsquared/Catch - user23743
@StephenFurlani - 一个小修正,Objective C 最初是 C 的严格超集,但现在不再是这样了,特别是随着 Objective C 2.0 和更新的 Clang 扩展(这是由 Apple 推动的事实上的 Objective C)。 - Léo Natan

5

C++和Objective C是向C语言添加面向对象的两种不同方法。目前,Objective C编译器也接受C++作为输入,因此您可以构建一个程序,其中一些文件是用Objective-C编写的,而其他文件是用C++编写的。当以这种方式使用C++时,通常称其为Objective-C++。


好的,谢谢。我们可以用C++进行iPhone开发吗? - Madan Mohan
1
@Madan:是的。在您的代码与iPhone内置库进行接口时,您需要至少使用一点Objective C,但是您可以在几乎所有其他方面使用C++。 - Jerry Coffin

0

1) C++是一种从C语言派生出来的编程语言,增加了面向对象(OO)等其他特性。*
2) Objective-C是一种从C语言派生出来的编程语言,增加了面向对象(OO)等其他特性。*
3) Objective-C++是Objective-C,您可以使用C++类。

您可以使用C++进行iPhone开发,但需要“一些”Objective-C代码与iPhone库进行接口。

(*)尽管它们都试图解决同样的问题,但它们的解决方法有所不同。关于差异的一些信息可以在wikipedia上找到,我相信您可以使用谷歌找到更多信息。


-4
你可以使用C++进行iPhone开发,但需要“一些”Objective-C代码与iPhone库进行交互。
这很可能会导致代码和可能的内存膨胀。如你所知,iOS编程应该尽可能精简:最小化库大小和运行时内存需求。iOS编程和运行时环境也高度优化了Objective C。
对于iOS来说,纯ObjC比C++好得多。除非您正在尝试使用现有的大型C++代码库,否则重新从头开始编写可能更好。几乎所有的C++ STL在iOS框架中都有类似物,通常更易于使用,并且已经被Apple高度优化。
学习Objective-C内存管理,熟悉框架并开始吧。

3
更正:如果您同时很好地使用两种语言,并且二进制大小和内存消耗是您的首要考虑因素,那么C++通常会在二进制大小和内存消耗方面更小。额外的好处是,C ++程序通常比Objective-C程序执行得更快。不要费心将现有的C ++程序重写为Objective-C程序。 - justin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接