object-c

时间:2024-12-17 01:16:39编辑:奇事君

Object C和C++有什么区别

Objective-C 与 C++ 的区别:


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) bar bar1:(int)bar;
-(char*)foo:(int) bar bar2:(int)bar;
而在 C++ 中以下是非法的, 编译将出错, 因为两者解析出来都是类似于 foo:int, 编译器无法辨别.
int foo(int bar, int bar1);
char* foo(int bar, 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 让人感觉更优雅简洁.

参考:http://www.cnblogs.com/MarsGG/articles/1948697.html


objective-c与C++的区别

Objective-C,是在C的基础上,加入面向对象特性扩充而成的编程语言。 Objective-C主要应用於Mac OS X和iOS 系统,可以在任何gcc支持的平台上进行编译,因为gcc原生支持Objective-C。 程序例子: #import int main(int argc, char *argv[]){ NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; NSLog(@"Hello World!"); [pool drain]; return 0; } -- C++ 是在C基础上加了class 等新东西而成的编程语言,可以把C看成是C++的一部分。 可以用它写面向对象的程序,也可以写以过程为主的程序。 C++ 已得到广泛(远比objective-c广泛)应用,用于各种平台。 -- Objective-C 不用“函数调用”,而用互相传递讯息。 Objective-C 类分为Interface和implementation两块。 Objective-C 构建对象 分为两块 alloc (内存分配)以及init(初始化) Objective-C 协议分为非正式协议和正式协议 ..... (请自己参考书籍或资料)


上一篇:无锡三维地图

下一篇:没有了