Objective-C 和 C++ 的区别有哪些?为什么苹果7和苹果8的区别会选择前者

Objective-C、C++以及C之间的区别 - CSDN博客
Objective-C、C++以及C之间的区别
&&&&&& 随着ios开发的兴起,Objective-C语言收到了广大移动开发者的青睐。而传统的使用最广泛的语言c++在不同的操作系统、不同的应用平台上继续发挥自己的能量。可以看到,前面两种语言都一个共同的字母—c,毫无疑问预示着c语言相当于这两种开发语言的母亲(不能认为是鼻祖,因为还有汇编、机器语言等)。那么三者的关系与区别到底有哪些呢?
& && 历史:
&&&&&&& C:一九七八年由AT&T的贝尔实验室正式发表了C语言。后来由美国国家标准学会ANSI在此基础上制定了一个C语言标准,并于1983年发表,即为ANSI C。
&&&&&&& C++:一九八三年又由贝尔实验室的Bjarne Strou-strup推出了C++。 C++进一步扩充和完善了C语言,成为一种面向对象的程序设计语言。
&&&&&&& 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和其他平台上的开发语言(GNUstep是什么,可以参考其官方网页)。
&&&&& 特点:
&&&&& C语言特点:
&&&&&& 1.作为一种结构化语言,层次清晰,便于按模块化方式组织程序,易于调试和维护;
&&&&&& 2.表现能力和处理能力极强。可以直接访问内存的物理地址,进行位(bit)一级的操作;
&&&&&& 3.C语言实现了对硬件的编程操作,因此C语言集高级语言和低级语言的功能于一体—既可用于系统软件的开发,也适合于应用软件的开发;
&&&&&& 4.C语言还具有效率高,可移植性强等特点。因此广泛地移植到了各类各型计算机上,从而形成了多种版本的C语言(主要为演进成了后来的C++)。
&&&&& C++语言特点:
&&&&&&&& 1.在C语言的基础上进行扩充和完善,使C++兼容了C语言的面向过程特点,又成为了一种面向对象的程序设计语言;
&&&&&&&& 2.可以使用抽象数据类型进行基于对象的编程;
&&&&&&&& 3.可以使用多继承、多态进行面向对象的编程;
&&&&&&&& 4.可以担负起以模版为特征的泛型化编程。
OC语言特点:
&&&&&&& 1.Objecive-C属于Smalltalk学派,其面向对象与C++面向对象编程力的Simula 67(一种早期面向对象语言)学派不同;
&&&&&&& 2.Objective-C 是ANSI C的超集,扩展了C 语言使它具备面向对象设计的能力,例如类、消息‘继承;同时在Objective-C的代码中可以有C和C++语句,它可以调用C的函数,也可以通过C++对象访问方法;
&&&&&&& 3.Objective-C可以实现底层系统编程,另一方面可以支持利用动态架构进行开发。
C++与OC同为面向对象设计语言,他们有很多相似的对象,但是由于两者属于不同的面向对象学派。因此两者之间的比较也乐此不疲。下面简要说说他们的区别:
&&&&&&& 1.继承:Objective-C与同Java和Smalltalk一样不支持多重继承,而C++语言支持多重继承(从侧面可以说明多重继承的效率不高);
&&&&&&& 2.函数调用:Objective-C通过互相传递消息实现函数调用,而C++直接进行函数调用
&&&&&& 3.定型:Objective-C是动态定型(dynamicaly typed)。所以它的类库比C++要容易操作。Objective-C 在运行时可以允许根据字符串名字来访问方法和类,还可以动态连接和添加类。而C++,对象的静态类型决定你是否可以发送消息给它。
&&&&&&& 4.接口:Objective-C采用protocol协议(非正式和正式)的形式来定义接口,而C++采用虚函数的形式来定义接口。
&&&&&&& 5.方法重载:c++中允许两个方法的名字相同,参数个数相同,但是参数类型不同,以及不同的返回值类型。而OC中不允许同一个类中两个方法有相同的名字,参数个数相同,参数类型不同。如下图XCode报错:
Simula67学派主张编程安全,即大部分程序可以在编译时查出,他的支持者声称既然程序设计出色何必再要灵活性,而Smalltalk称为了灵活可以容忍运行时多出错。因此Objective-C和C++的区别就是Objective-C更加灵活而降低了其编译的要求(这个降低并不是说编译就无要求,不会进行类型检查等),而C++提高编译的要求,在编译的过程发现更多的潜在错误,在运行前改正,同时会降低程序的灵活性。因此,在Smalltalk看来正确的程序在Simulr 67那里就无法通过。例如:
对于这行代码:NSString *test =(id) [[NSArray alloc] init];//在编译期间,C++认为是错误的,而OC则认为没有问题。
总之两者的差别主要是因为Objective-C是既支持Dynamic Typing,也支持Static Typing的语言。对于id类型的变量,变量只是一个容器,本身是没有类型的,或者是属于最基本的类型,所以也不需要强制转换。因为编译器不会检查变量的类型是否正确,只是运行时如果类型不正确才会产生异常。
而C++是Static Typing语言,编译时会检查类型,所以必须要加上强制类型转换,否则编译器会报错。
本文已收录于以下专栏:
相关文章推荐
最近在做一个项目需要把OpenCV 的代码移植到iOS中,在移植过程中遇到了很多问题,其中最关键的就是OC与C++混编的问题,找了很多资料和弯路终于走通了,现在把思路整理好做个笔记.希望能给有需要的朋...
Objective-C和C++混编的要点
在 Objective-C++中,可以用C++代码调用方法也可以从Objective-C调用方法。在这两种语言里对象都是指针,可以在任何地方使用。例 如,C...
我觉得最主要的区别就是,c++中的对象可以是动态创建的(使用new来创建,返回对象的地址),也可以是直接的创建对象(如:A a;就是直接创建)。
所以在c++中就有了 值传递 与指针传递的区别。在j...
很多想开发iOS,或者正在开发iOS的程序员以前都做过Java或者C++,当第一次看到Objective-C的代码时都会头疼,Objective-C的代码在语法上和Java, C++有着很大的区别,有...
原文传送门:http://blog.csdn.net/dqjyong/article/details/7663866
       随着ios开发的兴起,Objective-C语言收到了广大移动开发者...
在使用oc和c的混合编程时,很多新手,应该是比较困惑的,不知道如何下手,如何完成一个混合编程的基本过程。本文作为一个简单的说明,希望能够起到抛砖引玉的作用,为各位新手,提供一定的帮助作用。
随着ios开发的兴起,Objective-C语言收到了广大移动开发者的青睐。而传统的使用最广泛的语言c++在不同的操作系统、不同的应用平台上继续发挥自己的能量。可以看到,前面两种语言都一个共同的字母—...
        C:一九七八年由AT&T的贝尔实验室正式发表了C语言。后来由美国国家标准学会ANSI在此基础上制定了一个C语言标准,并于1983年发表,即为ANSI C。
随着ios开发的兴起,Objective-C语言收到了广大移动开发者的青睐。而传统的使用最广泛的语言c++在不同的操作系统、不同的应用平台上继续发挥自己的能量。可以看到,前面两种语言都一个共同的字母—...
C语言的特点:
1)C语言是结构化语言,层次清晰,调试和维护比较容易
2)表现能力和处理能力比较强,可直接访问内存的物理地址
3)c语言实现对硬件的编辑,c语言课用语系统软件的开...
他的最新文章
讲师:宋宝华
讲师:何宇健
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)Pages: 1/15
主题 : Objective-C与Objective-C++的混用代码示例
级别: 天使
发帖: 90659
可可豆: 922081 CB
威望: 921946 点
在线时间: 5508(时)
发自: Web Page
来源于&&分类
Objective-C与Objective-C++的混用代码示例&&&
这里难得有个地方可以讨论苹果产品开发的地方,非常好。这里与csdn相比起来有诸多优点,比如对Safari浏览器的支持以及氛围和人气都非常高。很多已经熟悉C/C++的朋友在初次使用Objective-C作为开发语言时不是很习惯,不过objective-C/C++本身又是几乎完全兼容GNU C/C++的。这里作为一个代码实例来描述Objective-C与objective-C++如何混合使用。其实这就同C与C++如何混用一样,还是非常容易上手的。不过,为了能够更好地看清这一混合优势。项目中使用了objective-C/C++一个非常强大的语法——Category(类别,或范畴)对原有的类Sample进行扩展,衍生出一个accumulateValue这个成员方法。这个方法的实现放在一个.mm文件中(.m文件表示objective-C源文件,.mm表示objective-C++源文件),并且通过一个模板函数来实现。这段代码看上去比较复杂,不过这仅仅作为一个样例而已。模板函数的功能是将Sample类的一个对象的value值不断累加。比如:初始值为1,那么迭代一次就是2;再迭代一次就是4。每次迭代都是自己与自己相加。在accumulateValue方法的实现中,使用AccumulateValue&sizeof(self.value)&(self);表示在32位系统下迭代4次;在64位系统下迭代8次。如果各位还有什么疑问或建议可以进行回复,谢谢。我的联系方式为:iChat:
描述:包含项目文件
(47 K) 下载次数:3082
本帖最近评分记录: 共可可豆条评分记录
新浪围脖地址:.cn/CPU Dasher for OS X: /cn/app/cpu-dasher/id?mt=12
级别: 骑士
可可豆: 3358 CB
威望: 3358 点
在线时间: 351(时)
发自: Web Page
我怎么下不了呢? 总是job.php。。。。
级别: 圣骑士
可可豆: 6505 CB
威望: 6505 点
在线时间: 388(时)
发自: Web Page
有Objective C++吗?
级别: 天使
发帖: 90659
可可豆: 922081 CB
威望: 921946 点
在线时间: 5508(时)
发自: Web Page
[回复1楼]:可以下啊。我刚才试过了。用的是Safari浏览器。你用的是什么浏览器?[回复2楼]:有。不过比较简洁,没有用C++ class作为例子,而是使用模板。主要介绍了.m与.mm跨语言的函数交叉调用。顺便说一下。目前为止,objective-C/C++是最最强大的开发语言了。除了Cocoa相关框架和库之外,像Boost、STL以及标准ANSI C运行时库均可使用。不过大家在使用这些库时还得注意自己程序的运行环境。
新浪围脖地址:.cn/CPU Dasher for OS X: /cn/app/cpu-dasher/id?mt=12
级别: 天使
发帖: 90659
可可豆: 922081 CB
威望: 921946 点
在线时间: 5508(时)
发自: Web Page
刚才用IE浏览器也能下。
新浪围脖地址:.cn/CPU Dasher for OS X: /cn/app/cpu-dasher/id?mt=12
级别: 天使
发帖: 90659
可可豆: 922081 CB
威望: 921946 点
在线时间: 5508(时)
发自: Web Page
Google Chrome也能下
新浪围脖地址:.cn/CPU Dasher for OS X: /cn/app/cpu-dasher/id?mt=12
级别: 管理员
发帖: 7688
可可豆: 73313 CB
威望: 73439 点
在线时间: 5514(时)
发自: Web Page
多谢。测试了,可以下啊
In all thy ways acknowledge Him, and He shall direct thy paths.
级别: 侠客
可可豆: 2134 CB
威望: 2134 点
在线时间: 431(时)
发自: Web Page
目前为止,objective-C/C++是最最强大的开发语言了。除了Cocoa相关框架和库之外,像Boost、STL以及标准ANSI C运行时库均可使用。请问怎么使用STL和Boost呢?
级别: 侠客
可可豆: 2134 CB
威望: 2134 点
在线时间: 431(时)
发自: Web Page
我要在objective c的头文件中引用STL怎么做呢?
级别: 版主
发帖: 1766
可可豆: 112205 CB
威望: 112852 点
在线时间: 8537(时)
发自: Web Page
很不錯得例子, 喚醒楽小僧內心深處de一些東西....
 Developer------------------------------------------------------------Η αγάπη ποτέ δεν αποτυγχάνει.愛是永不止息。Love never fails.
    --《圣经.新约》哥林多前书第13章
Pages: 1/15
关注本帖(如果有新回复会站内信通知您)
发帖、回帖都会得到可观的积分奖励。
按"Ctrl+Enter"直接提交
关注CocoaChina
关注微信 每日推荐
扫一扫 关注CVP公众号
扫一扫 浏览移动版27被浏览902分享邀请回答0添加评论分享收藏感谢收起249被浏览39774分享邀请回答1824 条评论分享收藏感谢收起

我要回帖

更多关于 荣耀9和v9 区别 的文章

 

随机推荐