object c和c++的区别

作者&投稿:和彬 (若有异议请与网页底部的电邮联系)
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

C语言是基础语言,可以用于写底层代码,要想学好需要长时间的累计经验;OC简单来说就是C语言的封装版,比C用起来更方便,而且更规范。OC是专门开发苹果IOS程序的,但是在实际开发中会用到C语言的变成。现在IOS开发的程序员好多都在学习Swift,类似于js变成,效率比oc高。

两者都是C语言的衍生,但C++完全不支持Objectice C,Objectice C仅仅支持部分C++特性(比如mm文件直接定义及实现类、函数指针等)。
Objective C在效率上比C++差一些(因为支持类反射,这样一来会有差距,而C++在这方面做得比较好),而且有些高级语言的底层支持C++(比如JNI)不支持Objectice C,导致Objectice C完全没名气。而且Objectice C因为好多API完全闭源也导致了现在也完全不能与主流的C++、Java、C#、VB等语言相提并论。
Objectice C应用的兴起也是2008年iPhone发布以后的事了。不过在这个硬件制造性能大幅提升的时代,C++的一些缺陷渐渐被性能稍差但比一些高级语言效率要好的Objectice C有所取代(因为它的内存还是手工管理的)。

完全是两种不同的语言


船山区13360336653: Object C和C++有什么区别 -
玉顾康博: 单一继承:Objective-C不支持多重继承,(同Java和Smalltalk),而C++语言支持多重继承.动态:Objective-C是动态定型(dynamicaly typed)所以它的类库比C++要容易操作.Objective-C 在运行时可以允许根据字符串名字来访问方法和类,...

船山区13360336653: ObjectC和C++的区别 -
玉顾康博: 通常写作objective-c或者obj-c object-c语言是根据C语言所衍生出来的语言,继承了C语言的特性,是扩充C的面向对象编程语言 它主要使用于MAC OS X和GNUstep这两个使用OpenStep标准的系统.在MAC OSX系统下,运用苹果提供的SDK等...

船山区13360336653: object c和c++的区别 -
玉顾康博: 两者都是C语言的衍生,但C++完全不支持Objectice C,Objectice C仅仅支持部分C++特性(比如mm文件直接定义及实现类、函数指针等). Objective C在效率上比C++差一些(因为支持类反射,这样一来会有差距,而C++在这方面做得比较好...

船山区13360336653: object c与c的差别,详细一点 -
玉顾康博: 这个比还是差多了点一个面向对像,一个没有..应该是object c和c++的比较. 有本书叫《从C++到object-c》,好像只有英文版,你可以去看下,比较详细的比较了这两个东西.

船山区13360336653: ObjectC和C++的区别
玉顾康博: 模糊输入跟编译器有关系吧...跟语言无关像用VC\VS装tomato这样

船山区13360336653: 【C语言】Objective - C 和 C++ 的区别有哪些? -
玉顾康博: 这东西跟c++有什么本质区别?为什么苹果会选择obj-c而不是c++? 答:Objective-C是C的扩展,设计思路上借鉴了Smalltalk的面向对象和消息机制的思想.从我个人使用过的面向对象语言来看Objc 是对消息传递支持的最彻底也最显式的....

船山区13360336653: object - c的和C++的比较 -
玉顾康博: 目前好象只有Apple使用Objective-C作为其支持的语言吧. 与C++的不同之处有: O-C中所有的类都必须继承自NSObject. O-C中所有对象都是指针的形式. O-C用self代替this. O-C使用id代替void*. O-C使用nil表示NULL O-C只支持单继承. ...

船山区13360336653: Objective C 和 C++的区别
玉顾康博: 和c++也是有c语言派生出来的一种语言,并且和c++一样主要改进就是加入了面向对象的机制,只是实现的方式和思路和c++不同.主要用来开发mac os以及ios下的应用.

船山区13360336653: Objective - C 和 C++ 的区别有哪些?为什么苹果会选择前者 -
玉顾康博: Objective C基本上是在C + Smalltalk基础上衍生出来的,C++就是C++.除了都是从C语言分化出来的以外,完全没有任何共性.最大的区别就是Objective C的成员函数调用是基于动态绑定的,类本身并没有限制对象可以有什么函数.相对于C+...

船山区13360336653: C语言与C++的区别 -
玉顾康博: 1,全新的程序程序思维,C语言是面向过程的,而C++是面向对象的. 2,C语言有标准的函数库,它们松散的,只是把功能相同的函数放在一个头文件中;而C++对于大多数的函数都是有集成的很紧密,特别是C语言中没有的C++中的API是对...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网