`
janedoneway
  • 浏览: 581885 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Objective-C 与 C++ 的异同

 
阅读更多

http://www.cnblogs.com/y041039/archive/2012/07/26/2609810.html

 

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++ 支持;

 

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

 

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

 

 

Refence:

http://pierre.chachatelier.fr/programmation/fichiers/cpp-objc-en.pdf

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

分享到:
评论

相关推荐

    From C++ to Objective-C

    从C++到Objective-C的转型指南涉及到了几个重要的IT知识领域,主要包括编程语言的比较、面向对象编程的概念、Objective-C语言的语法特点以及与C++的共性和差异。 首先,Objective-C是一种主要在苹果公司产品开发中...

    这是一个基于Objective-C语言的基础案例集。旨在用于给初学者快速了解Objective-C语言的语法。.zip

    此外,尽管本案例集专注于Objective-C,标签中提到了C#和C++,这表明这些语言也可能作为比较对象,帮助初学者理解不同编程语言的异同。课程设计和毕业设计则暗示了这个案例集可能适用于教育环境,作为实际项目的一...

    learn objective-c for java developers

    10. **Objective-C++**:Objective-C与C++可以混编,这使得引入C++库或利用C++的强大功能成为可能,但需要注意两者的兼容性问题。 总的来说,从Java到Objective-C的迁移需要对这两种语言的异同有深入理解,特别是...

    From C+++ To Object

    #### Objective-C与C++:异同分析 Objective-C与C++之间的联系与区别可以从多个层面进行探讨: 1. **语法结构**:Objective-C保留了C语言的语法结构,这意味着任何有效的C代码也应该是有效的Objective-C代码。然而...

    从C++到Objective C的学习之路

    C++起源于C语言,强调面向对象编程,而Objective C则是在C的基础上扩展了面向对象特性,主要用于苹果的iOS和Mac OS X开发。从C++过渡到Objective C的学习之旅是一条富有挑战的道路,但同时也充满了机遇。以下是一些...

    C语言核心技术-C语言进阶用书PDF

    最后,了解C语言标准,如C99和C11,以及其与C++、Objective-C等其他语言的异同,可以帮助程序员更好地适应不同的开发环境和项目需求。 "C语言核心技术(英文).pdf"这本书可能详细讲解了以上各个主题,并可能包含...

    编程语言1

    本文主要关注的是编程语言1,特别是其中涉及的C++动态联编技术、虚函数、纯虚函数以及与抽象方法和接口的区别,同时也会讨论Android和iOS平台的开发语言以及Java和Objective-C的异同。 1. **C++动态联编技术**:...

    2021iOS笔试题总结.pdf

    Objective-C是C语言的超集,并且继承了C语言的特性,同时加入了面向对象的特性。与Java类似,Objective-C支持单继承机制,意味着一个类只能继承自一个父类。这与C++的多重继承特性不同。Objective-C不支持命名空间...

    iOS面试题2019年度总结188题(下).pdf

    ### 第107题:Objective-C与C语言有何异同? - **面向对象**:Objective-C支持面向对象编程,而C语言是一种过程式语言。 - **动态性**:Objective-C支持动态消息传递,而C语言是静态绑定。 - **语法扩展**:...

    福昕软件招聘iOS开发工程师面试题

    3. Objective-C发送消息与C++成员方法或C的函数调用的区别在于动态绑定,即在运行时确定接收者和实现,而C++和C是在编译时确定。 4. 代码问题:缺少autorelease,可能导致内存泄漏。正确版本:`return [[[NSNumber ...

    Linux系统下的C程序设计

    2. **编译工具——GCC**:GCC(GNU C Compiler)是GNU项目中的核心编译器,支持多种编程语言的编译,包括C、C++、Objective-C等。GCC能够处理不同类型的源文件,如`.c`(C语言)、`.cc`或`.cxx`(C++)、`.s`(汇编...

    gcc_arm-linux-gcc_arm-elf-gcc.rar_arm linux gcc_arm-elf-gcc_elf_

    GCC是GNU项目的核心组件之一,是一个开源的编译器套件,支持多种编程语言,如C、C++、Objective-C、Fortran、Ada和Go等。它不仅包含了前端(负责解析源代码并生成中间表示)和后端(负责生成特定机器代码),还有...

    从Windows的角度看MacOSX上的软件开发兼谈跨平台开发的一些可行方向.pdf

    MacOSX 使用 Objective-C 语言,而 Windows 使用 C/C++/C# 语言。 MacOSX 的 Core API 和 Carbon、Cocoa 等框架,也与 Windows 的 API 和框架有所不同。 三、bundle 软件包装格式 MacOSX 的 bundle 软件包装格式...

    IOS 静态方法与动态方法详解

    IOS 静态方法与动态方法详解 ... 从根本来说,c++、objective-c、java都发源于c语言,因此这些语言实际上可以理解了经过封装的c语言,所以它们更加方便使用但效率不如c语言。  因此,对象的底层实际上就是结构体

    数据结构算法演示系统

    3. **类C语言**:类C语言指的是C语言的派生语言,如C++或Objective-C,它们保留了C语言的基本语法,同时提供了面向对象的特性。在这个系统中,用户可以选择类C语言编写脚本,实现数据结构和算法的模拟,体验面向对象...

Global site tag (gtag.js) - Google Analytics