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
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不支持多重继承,(同Java和Smalltalk),而C++语言支持多重继承。
动态:Objective-C是动态定型(dynamicaly typed)所以它的类库比C++要容易操作。Objective-C 在运行时可以允许根据字符串名字来访问方法和类,还可以动态连接和添加类。
C++ 跟从面向对象编程里的Simula67(一种早期OO语言)学派,而Objecive-C属于Smalltalk学派。 在C++里,对象的静态类型决定你是否可以发送消息给它,而对Objecive-C来说,由动态类型来决定。Simula 67学派更安全,因为大部分错误可以在编译时查出。而Smalltalk学派更灵活,比如一些Smalltalk看来无误的程序拿到Simualr 67那里就无法通过。从很多方面来看,C++和Objective-C的差别,与其说时技术上的,不如说是思维方式上的。
常用的系统快捷键:复制、粘贴 、剪切option+c,Option+V,Alt+table,Option+N,Shift+Option+N
内核环境:主要由Mach和BSD组成,但它同时也包括了网络协议栈、网络服务、文件系统和设备驱动程序
动态:Objective-C是动态定型(dynamicaly typed)所以它的类库比C++要容易操作。Objective-C 在运行时可以允许根据字符串名字来访问方法和类,还可以动态连接和添加类。
C++ 跟从面向对象编程里的Simula67(一种早期OO语言)学派,而Objecive-C属于Smalltalk学派。 在C++里,对象的静态类型决定你是否可以发送消息给它,而对Objecive-C来说,由动态类型来决定。Simula 67学派更安全,因为大部分错误可以在编译时查出。而Smalltalk学派更灵活,比如一些Smalltalk看来无误的程序拿到Simualr 67那里就无法通过。从很多方面来看,C++和Objective-C的差别,与其说时技术上的,不如说是思维方式上的。
常用的系统快捷键:复制、粘贴 、剪切option+c,Option+V,Alt+table,Option+N,Shift+Option+N
内核环境:主要由Mach和BSD组成,但它同时也包括了网络协议栈、网络服务、文件系统和设备驱动程序
参考资料: http://blog.csdn.net/hezhibo/article/details/2361605
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
两者都是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有所取代(因为它的内存还是手工管理的)。
Objective C在效率上比C++差一些(因为支持类反射,这样一来会有差距,而C++在这方面做得比较好),而且有些高级语言的底层支持C++(比如JNI)不支持Objectice C,导致Objectice C完全没名气。而且Objectice C因为好多API完全闭源也导致了现在也完全不能与主流的C++、Java、C#、VB等语言相提并论。
Objectice C应用的兴起也是2008年iPhone发布以后的事了。不过在这个硬件制造性能大幅提升的时代,C++的一些缺陷渐渐被性能稍差但比一些高级语言效率要好的Objectice C有所取代(因为它的内存还是手工管理的)。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Objective-C标准C的一个扩展,和C++基本没有关系,iOS开发是可以用C++开发的,如果你从事ios开发,建议不用C++,甚至忘记C++,把Objective-C完全学通再说。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
两者都是C语言的衍生,但C++完全不支持Objectice C,Objectice C仅仅支持部分C++特性。Objectice C较之C++要晚出生点。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询