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