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感觉更优雅简洁。

Objective-C与C++的区别的更多相关文章

  1. Objective C assign&copy & retain区别

    什么是assign,copy,retain之间的区别? assign: 简单赋值,不更改索引计数(Reference Counting). copy: 建立一个索引计数为1的对象,然后释放旧对象 re ...

  2. objective c,copy, mutableCopy区别

    copy总是返回不能被修改的对象,mutableCopy返回可以被修改的对象 例: NSArray *array = @[@"test", @"test2"]; ...

  3. Automake

    Automake是用来根据Makefile.am生成Makefile.in的工具 标准Makefile目标 'make all' Build programs, libraries, document ...

  4. Objective C类方法load和initialize的区别

    Objective C类方法load和initialize的区别   过去两个星期里,为了完成一个工作,接触到了NSObject中非常特别的两个类方法(Class Method).它们的特别之处,在于 ...

  5. Objective C语言中nil、Nil、NULL、NSNull的区别

    以下内容是基于搜集整理的网上资料,供参考. nil:指向Objective C语言中对象的空指针,其定义值为(id)0. Nil:指向Objective C语言中类(Class)的空指针,其定义值为( ...

  6. Objective C中nil/Nil/NULL的区别

    nil:指向oc中对象的空指针 Nil:指向oc中类的空指针 NULL:指向其他类型的空指针,如一个c类型的内存指针 NSNull:在集合对象中,表示空值的对象 若obj为nil:[obj messa ...

  7. Objective-C( Foundation框架 一 字符串)

    Objective-C 中核心处理字符串的类是 NSString 与 NSMutableString ,这两个类最大的区别就是NSString 创建赋值以后该字符串的内容与长度不能在动态的更改,除非重 ...

  8. Objective C笔记(第一天)

    • OC语言概述 1.早在20世纪80年代早期,Bard Cox发明了Objective C, 是扩充的C,面向对象的编程语言. 2.NEXTSTEP简称NS a.1985年,Steve Jobs成⽴ ...

  9. 理解Objective C 中id

    什么是id,与void *的区别 id在Objective C中是一个类型,一个complier所认可的Objective C类型,跟void *是不一样的,比如一个 id userName, 和vo ...

随机推荐

  1. YTU 2972: C语言习题5.24--文件操作1

    2972: C语言习题5.24--文件操作1 时间限制: 1 Sec  内存限制: 128 MB 提交: 248  解决: 94 题目描述 文本文件score.dic 中存储了n名学生的信息(班级编号 ...

  2. MySQL常用操作总结

    MySQL常用操作 前提条件:已安装MySQL. 学习目标:用一条sql语句写出A和B的剩余数量 AA表 BB表 以上为一道面试题,接下来由这道面试题来回顾一些数据库的基本操作. 登录MySQL su ...

  3. Jquery中的filter()详细说明和transition的用法

    filter() 方法将匹配元素集合缩减为匹配指定选择器的元素. 详细说明 如果给定表示 DOM 元素集合的 jQuery 对象,.filter() 方法会用匹配元素的子集构造一个新的 jQuery ...

  4. JS实现base64编码与解码

    var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" ...

  5. CSU 1325: A very hard problem 中南月赛的一道题。

    1325: A very hard problem Time Limit: 3 Sec  Memory Limit: 160 MBSubmit: 203  Solved: 53[Submit][Sta ...

  6. COM技术の组件

    什么是COM COM,Component Object Mode即组件对象模型.之所以称之为“模型”,是表明COM是一种编程规范(非具体代码),通过这种规范我们能够编写出语言无关的,可扩展的,内部变化 ...

  7. combotree的加载方法

    <!DOCTYPE html><html><head> <meta http-equiv="Content-Type" content=& ...

  8. HTML 的 <div> 和 <span> 标签

    这篇文章里会涉及到两个术语,这里先明确一下: 块级元素,block level element 内联元素(或者叫行内元素),inline element 大多数 HTML 元素被定义为块级元素和内联元 ...

  9. python学习笔记五 模块上(基础篇)

    模块学习 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要 ...

  10. spark记录

    Filtering multiple values in multiple columns: In the case where you're pulling data from a database ...