zoukankan      html  css  js  c++  java
  • Objective-C与C++的区别

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

    2、两者的最大不同:Objective-C提供了运行期动态绑定机制,而C++是编译静态绑定,并且通过嵌入类(多重继承)和虚函数(虚表)来模拟实现。Objective-C在语言层次上支持动态消息转发,其函数调用语法为[objece message],而且C++为object->function()。两者的语义也不同,在Objective-C里是说发送消息给 一个对象,至于这个对象能不能处理消息以及是处理还是转发都不crash,而在C++里是说对象进行了某个操作,如果对象没有这个操作的话,要么编译会报错(静态绑定),要么程序会crash掉的(动态绑定)。

    3、Objective-C不支持多继承,而C++支持。不过Objective-C通过protocol(协议)和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感觉更优雅简洁。

  • 相关阅读:
    SublimeText3下的Python开发环境配置
    从Evernote迁移到Wiz
    读书笔记---《即学即用财务常识120例》
    MC700 安装双系统
    Python3.5 + django1.8.5 安装”import pymysql pymysql.install_as_MySQLdb()”的解决方法
    7z压缩文件时排除指定的文件
    安装.NET Framework后程序无法启动的错误处理
    重拾Blog
    X240s安装Win7 以及如何启用ExpressCache
    新玩具---Amazon Kindle PaperWhite 2
  • 原文地址:https://www.cnblogs.com/mupiaomiao/p/4596106.html
Copyright © 2011-2022 走看看