详解Objective-C 与 C++区别之分

移动开发 iOS
本文主要讲述了Objective-C 与 C++的区别,通过两者的区分学习,我们学习起来更方便些,先来看详细内容。

Objective-CC++区别是本文要结束的内容,主要是通过两者的区分学习,我们学习起来更方便些。不多说,我们来看详细内容。

1、两者***的相同便是: 都是从 C 演化而来的面向对象语言, 两者都兼容标准 C 语言.

2、两者***的不同便是: Objective C 提供了运行期动态绑定机制, 而C++ 是编译时静态绑定, 并通过嵌入类(多重继承)和虚函数(虚表)来模拟实现. Objective C 在语言层次上支持动态消息转发, 其函数调用语法为 [object function], 而且C++ 为 object->function(). 两者的语义也有不同,

在 Objective C 里是说发送消息到一个对象上, 至于这个对象能不能处理消息(也就是说实现了这个函数与否)以及是处理还是转发消息都不会 crash, 而在 C++ 里是说对象进行了某个操作,如果对象没有这个操作的话,要么编译会报错(静态绑定),要么程序会 crash 掉的(动态绑定).

3、Objective C 不支持多重继承, 而 C++ 支持. 不过 Objective C 通过 proxy(代理) 和 Category(类别) 可以更优雅地实现这一特性. 这一点也包括了 overwriting(覆盖) 和 overloading(重载) 两者的不同.

4、函数名字解析也不同, Objective C 的函数名字解析是函数名称 + 参数名称的, 而 C++ 只包括函数名称.  因此在 Objective C 中以下是合法的,因为两者解析出来分别类似于 foo:bar1 和 foo:bar2, 是不同的;

-(int)foo:(int) bar1;  //原作者“Objective C 的函数名字解析是函数名称 + 参数名称”这里的参数名其实是指 “参数描述”,只有在两个以及两个以上的参数时才能有这么个意思。作者是直接将形参值的名字作为参数描述了,而且要说明这一点概念举例也不正确。

  1. -(char*)foo:(int) bar2; 

(更正,原文对此的解释有错误,Objective-c 中没有重载,O-C只认函数名(包括参数描述))

要想实现类似重载的功能,只有先用NSNumber或者NSValue将参数装起来再作为参数,很笨的,不智能。

而在 C++ 中以下是非法的, 编译将出错, 因为两者解析出来都是类似于 foo:int, 编译器无法辨别.

  1. int foo(int bar1);  
  2. char* foo(int bar2); 

5、Objective-C 没有 C++ 里有的构造函数和析构函数, 其对应物为 alloc-init/free .

6、Objective-C 2.0 了加入了垃圾回收机制(在 iPhone 和 iPad 上不可用), 而 C++ 没有.

7、Objective-C 不允许在 Stack 上分配内存, 只能在 heap 上进行, 而 C++ 两者都允许.

8、Objective-C 不支持引用, 而 C++ 支持.

9、Objective-C 不支持模板, 而 C++ 支持.

10、Objective-C 是 Smalltalk 系的, 而 C++ 是 Simula 系的.

可以这么说 Objective-C 在 C 之上进行了一层简单的包装, 而 C++ 在 C++ 之上进行了复杂的包装, 但 Objective-C 让人感觉更优雅简洁

小结:详解Objective-C C++区别的内容介绍完了,希望本文对你有所帮助!

责任编辑:zhaolei 来源: 互联网
相关推荐

2011-08-16 13:43:40

Objective-C文件cocoa

2011-07-29 16:16:30

Objective-c block

2011-08-17 10:58:59

Objective-C构造函数

2011-08-17 10:29:39

Objective-C预处理

2015-10-08 10:01:10

Objective-CLayout

2011-07-18 16:36:51

Objective-C XCode

2014-04-01 10:50:42

iOS开发runtimeObjective-C

2015-06-25 11:21:33

C++Objective-C

2011-07-29 15:47:21

iPhone开发 Objective- C

2011-07-08 18:44:09

Objective-C Self Super

2011-08-16 10:23:04

Objective-CNSAutoreleaXcode常用键

2011-07-27 16:55:12

Objective-c 闭包

2011-08-01 17:11:43

Objective-C 函数

2011-08-15 14:32:42

Objective-C委托协议

2014-04-28 09:56:56

Objective-CiOS命名空间

2011-08-17 11:05:22

Objective-C方法

2011-08-10 18:07:29

Objective-C反射

2013-03-27 12:54:00

iOS开发Objective-C

2011-05-11 11:20:26

Objective-C

2011-05-11 15:58:34

Objective-C
点赞
收藏

51CTO技术栈公众号