Objective-C、C++以及C之间的区别

上一篇 / 下一篇  2012-09-28 10:13:27 / 个人分类:C++

;O"o$u9FA4E0  随着ios开发的兴起,Objective-C语言收到了广大移动开发者的青睐。而传统的使用最广泛的语言c++在不同的操作系统、不同的应用平台上继续发挥自己的能量。可以看到,前面两种语言都一个共同的字母—c,毫无疑问预示着c语言相当于这两种开发语言的母亲(不能认为是鼻祖,因为还有汇编、机器语言等)。那么三者的关系与区别到底有哪些呢?51Testing软件测试网*[ tR-x5l

W1hH6z-o:K5?Z0  历史:

;SPAR9C$W051Testing软件测试网g3{ t? Onr?

  C:一九七八年由AT&T的贝尔实验室正式发表了C语言。后来由美国国家标准学会ANSI在此基础上制定了一个C语言标准,并于1983年发表,即为ANSI C。

w)N K(D*wI F051Testing软件测试网 h8O0J1JPS5]

  C++:一九八三年又由贝尔实验室的Bjarne Strou-strup推出了C++。 C++进一步扩充和完善了C语言,成为一种面向对象的程序设计语言。51Testing软件测试网2|%SM X#M(tjhq

.tP5o!u9IS2f{;b_0   Objective -C:行内人简称其为OC。它的发展主要是因为1988年Steve Jobs的NextStep采用Objective-C作为开发语言,因此MacOS X以及IOS上的开发最佳语言自然也就是Objective-C了。同时Objective-C是苹果Mac OS X 上开发的首选语言,主要是因为Mac OS X 技术源自NextStep的OpenStep操作系统,因为OPENSTEP的软件架构(framework)都是用Objetive-C 写成。然后OC是由Brad Cox在80年代初在第一个纯面向对象语言Smalltalk基础上写成。Brod Cox创立了StepStone公司进行OC语言的推广。最终OC在1992年获得了GNU gcc编译器的支持,因此OC也是GNUstep在Linux和其他平台上的开发语言。

xQQ@$F'c Y;t051Testing软件测试网[#LdEKe

  特点:51Testing软件测试网wY4t9^Gfm

fX:S^wNY!Ys'l0  ● C语言特点:

$B"c]Jwj7iQ051Testing软件测试网F&X*wl{

  1、作为一种结构化语言,层次清晰,便于按模块化方式组织程序,易于调试和维护;51Testing软件测试网)g Fy'B_UD/G0h5bT]*H

51Testing软件测试网|Qt\1X^0FE

  2、表现能力和处理能力极强。可以直接访问内存的物理地址,进行位(bit)一级的操作;

i3HM;HW:u s-]051Testing软件测试网-Q;@D!oC6Sz(f&A0h:Gi

  3、C语言实现了对硬件的编程操作,因此C语言集高级语言和低级语言的功能于一体—既可用于系统软件的开发,也适合于应用软件的开发;51Testing软件测试网z&et;P:a

"AggRb*} Vj6n0  4、C语言还具有效率高,可移植性强等特点。因此广泛地移植到了各类各型计算机上,从而形成了多种版本的C语言(主要为演进成了后来的C++)。

2a? nxzR0

dIK*La.t },u7ZW0  ● C++语言特点:

+VwV3|&t!bJ/s051Testing软件测试网#N;~T@i;pZ"d:S

  1、在C语言的基础上进行扩充和完善,使C++兼容了C语言的面向过程特点,又成为了一种面向对象的程序设计语言;

|2_ E/r j8xP}051Testing软件测试网oVxJ ^7Z$k"a

  2、可以使用抽象数据类型进行基于对象的编程;

9e:a1A)m{'f J051Testing软件测试网9A~6f$|3W`8r4f

  3、可以使用多继承、多态进行面向对象的编程;51Testing软件测试网w7J N3QeIKPC

51Testing软件测试网RyqiIT

  4、可以担负起以模版为特征的泛型化编程。51Testing软件测试网OC7i'BzX~E

7h8d4S l6}2?/b`0  ● OC语言特点:51Testing软件测试网3G,pnp||FC

51Testing软件测试网J*H6VaawN3w+V

  1、Objecive-C属于Smalltalk学派,其面向对象与C++面向对象编程力的Simula 67(一种早期面向对象语言)学派不同;

k$~-eVc.E051Testing软件测试网b&^hFUTr9A

  2、Objective-C 是ANSI C的超集,扩展了C 语言使它具备面向对象设计的能力,例如类、消息‘继承;同时在Objective-C的代码中可以有C和C++语句,它可以调用C的函数,也可以通过C++对象访问方法;51Testing软件测试网FjlZ|-D@R`

&Bt I'fu*av:f6a(MU0  3、Objective-C可以实现底层系统编程,另一方面可以支持利用动态架构进行开发。

q1G8~7c A+p4QT051Testing软件测试网)j:[/E kf$r?

  C++与OC同为面向对象设计语言,他们有很多相似的对象,但是由于两者属于不同的面向对象学派。因此两者之间的比较也乐此不疲。下面简要说说他们的区别:51Testing软件测试网Z$l-m1@rgz

:Y,n0ivF+L0  1、继承:Objective-C与同Java和Smalltalk一样不支持多重继承,而C++语言支持多重继承(从侧面可以说明多重继承的效率不高);51Testing软件测试网7i\7hj&N

51Testing软件测试网1vZ'w {-u

  2、函数调用:Objective-C通过互相传递消息实现函数调用,而C++直接进行函数调用

M}UFGkt@ w ? A051Testing软件测试网"\ C2sd7B-d/y

   3、定型:Objective-C是动态定型(dynamicaly typed)。所以它的类库比C++要容易操作。Objective-C 在运行时可以允许根据字符串名字来访问方法和类,还可以动态连接和添加类。而C++,对象的静态类型决定你是否可以发送消息给它。

:{.PN$[B|{051Testing软件测试网qIH2W q|3YF

  4、接口:Objective-C采用protocol协议(非正式和正式)的形式来定义接口,而C++采用虚函数的形式来定义接口。51Testing软件测试网4g'n/s LZc]5r

51Testing软件测试网K7y!P4B&oP$g

  5、方法重载:c++中允许两个方法的名字相同,参数个数相同,但是参数类型不同,以及不同的返回值类型。而OC中不允许同一个类中两个方法有相同的名字,参数个数相同,参数类型不同。如下图XCode报错:51Testing软件测试网3m Ed4O/m3G$^N!b'C*z

51Testing软件测试网vR;u.TQ:uM:v3ZKp

  PS:51Testing软件测试网2O)}:us'X;mM

   Simula67学派主张编程安全,即大部分程序可以在编译时查出,他的支持者声称既然程序设计出色何必再要灵活性,而Smalltalk称为了灵活可 以容忍运行时多出错。因此Objective-C和C++的区别就是Objective-C更加灵活而降低了其编译的要求(这个降低并不是说编译就无要 求,不会进行类型检查等),而C++提高编译的要求,在编译的过程发现更多的潜在错误,在运行前改正,同时会降低程序的灵活性。因此,在 Smalltalk看来正确的程序在Simulr 67那里就无法通过。例如:51Testing软件测试网h0ok$EP7J3|9F|

  对于这行代码:NSString *test =(id) [[NSArray alloc] init];//在编译期间,C++认为是错误的,而OC则认为没有问题。

r+vR s_?+]2C.x0

   总之两者的差别主要是因为Objective-C是既支持Dynamic Typing,也支持Static Typing的语言。对于id类型的变量,变量只是一个容器,本身是没有类型的,或者是属于最基本的类型,所以也不需要强制转换。因为编译器不会检查变量 的类型是否正确,只是运行时如果类型不正确才会产生异常。

N$mM"SB9^n0

  而C++是Static Typing语言,编译时会检查类型,所以必须要加上强制类型转换,否则编译器会报错。51Testing软件测试网7_Ti7[i


TAG:

 

评分:0

我来说两句

Open Toolbar