• Objective-C 与 C++ 的异同


    stackflow 上有同学提问"C++ 与 Objective-C 有什么异同?"楼下的提供的两个资料挺不错的.

    其一是: Pierre Chatelier 写的 <From C++ to Objective-C version 2.1 en>

    下载链接:http://pierre.chachatelier.fr/programmation/fichiers/cpp-objc-en.pdf

    其二便是: Michael Rutman 写的 C++ Versus Objective-C:

    链接:http://www.mactech.com/articles/mactech/Vol.13/13.03/CandObjectiveCCompared/

    下面总结一下 Objective-C 与 C++ 的区别:

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

    2, 两者最大的不同便是: Objective C 是完全动态的,而 C++是部分动态的。
    Objective C 支持在运行时动态类型决议(dynamic typing),动态绑定(dynamic binding)以及动态装载(dynamic loading);
    C++ 是编译时静态绑定,通过嵌入类(多重继承)和虚函数(虚表)来模拟实现。
    Objective C 在语言层次上支持动态消息转发,其消息发送语法为 [object function]; 而且C++ 为 object->function()。 两者的语义也不同,在 Objective C 里是说发送消息到一个对象上,至于这个对象能不能响应消息以及是响应还是转发消息都不会 crash; 而在 C++ 里是说对象进行了某个操作,如果对象没有这个操作的话,要么编译会报错(静态绑定),要么程序会 crash 掉的(动态绑定)。

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

    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/dealloc;

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

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

    8, Objective-C 不支持模板,而 C++ 支持;Objective-C 不支持命名空间,而 C++ 支持;Objective-C 也不支持函数缺省默认参数,而 C++ 支持;

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

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

    转自: 罗朝辉(http://www.cppblog.com/kesalin

  • 相关阅读:
    转 通过 spring 容器内建的 profile 功能实现开发环境、测试环境、生产环境配置自动切换
    call_grant_sel.sql
    sql server 2008 评估期已过期解决办法
    (2.3)学习笔记之mysql基础操作(表/库操作)
    (2.2)学习笔记之mysql基础操作(登录及账户权限设置)
    Red Gate系列
    教你使用SQL数据库索引(1-15)
    cache与buffer的区别
    (4.17)什么情况下应该使用索引
    windows server2003/2008中权限账户
  • 原文地址:https://www.cnblogs.com/dracohan/p/3928618.html
Copyright © 2020-2023  润新知