问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

objective-c与C++的区别

发布网友 发布时间:2022-04-29 13:35

我来回答

5个回答

热心网友 时间:2022-06-29 00:06

与C语言相比要注意的地方

objective-c高级特性

开发工具介绍(cocoa 工具包的功能,框架,源文件组织;XCode使用介绍)

简介:

1. objective-c是C语言的一个扩展集,主要由APPLE公司维护,是MAC系统下的主要开发语言。

个人认为,对于用惯了常用的C,JAVA等语言的人来说,objective-c是一中很另类,非主流的语言。

2. 开发 Mac的 UI 程序来说,使用的是 Cocoa 这个框架,cocoa的组成部分有:foundation和application kit框架。

【foundation框架处理用户界面之下的特性,如数据结构和通信机制;application kit框架包含cocoa的高级特性:用户界面元素,打印,颜色,声音管理,applescript等】

与C语言相比要注意的地方:

1. 文件介绍:Objective-C 也使用头文件(header files),后缀为 .h, 但使用 .m(即 message, 其他面向对象编程语言也叫 method),作为源文件的后缀。

在objective-c中使用#import<>,而不使用#include<>,#import可以保证头文件只被包含一次。

2. 与C一致的地方:

数据类型,表达式,各种运算符

循环:for, while, do while, break, continue

分支:if, else, switch

3. NSlog()函数:与printf()类似,想控制台输出信息。但它增加了一些特性,如时间戳等。

【cocoa对起所有的函数,常量和类型名称都添加了NS前缀。】

4. 双引号的前面的@表示这双引号中的字符串应该作为cocoa的NSString元素来处理。

5. 布尔类型BOOL:值为YES,NO;

6. %d表示输出整数

%@表示输出NSString类型

%s表示输出字符串数组(char*);

7. objective-c中的方括号:

1. 用于通知某个对象该做什么。

2. 方括号内第一项是对象,其余部分是你需要对象执行的操作。

3. 在objective-c中通知对象执行某种操作,称为发送消息。(也叫调用方法)

8. 标识符id:是一种泛型,用于表示任何种类的对象。

9. 类声明@interface:

@interface Circle:NSObject //为Circle类定义接口;NSObject表示是父类。

{//以下是数据成员

ShapeColor fillColor;

ShapeRect bounds;

}

//以下是方法声明

-(void) setFillColor: (ShapeColor) fillColor; //前面的短线表明这是方法声明

//短线后面是方法的返回类型

//接着是方法名

//冒号后面是参数,其中(ShapeColor)是参数类型,

fillColor是参数名

-(void) setBounds:(ShapeRect) bounds;

-(void) draw;

//减号就是普通函数

加号就是静态函数

@end //结束声明

objective-c看到@符号,就把它看成是C语言的扩展。

一个类的完整声明如下:

@interface CClassA(Category): CBaseClass<IA,IB...>

//类名(类别名):父类<协议>

10. 类实现@implementation

@implementation

@implementation Circle

-(void) setFillColor: (ShapeColor) c

{

fillColor=c;

}

-(void) draw

{

NSLog(@”drawing a circle at(%d %d %d %d) in %@”, bounds.x,bounds.y,bounds.width,bounds.height,colorName(fillName));

}

@end

隐藏对象self对应于C中的this。

Self->fillcolor来访问成员变量。

11. 调用写好的类和类函数:

//创建新对象,使用缺省初始化函数

Bank *bankDefault = [[Bank alloc] init];

//调用方法:

[bank addAmount: 1];

[bank print];

// 释放对象:

[bankDefault free];

12.

两个参数的方法:

-(void) setTire: (Tire *) tire //声明

atIndex: (int) index;

//使用

[car setTire:tire atIndex:2];

objective-c高级特性:

1. 继承

Objective-c不支持多继承。

Super 关键字:调用该类的父类;

超类:父类的另一种说法。

2.

自定义NSLog()输出:

在类中添加description方法就可以自定义NSLog()如何输出对象。

@implementation Tire

-(NSString *) description

{

Return (@”I am a tire.”);

}

Main()

{

NSLog(@”%@”,tire[0]);

}

3.

Foundation kit:

Cocoa是由两部分框架组成的:foundation kit [包括一些基础类]和 application kit.【包括用户接口对象和高级类】

创建字符串:

NSString *test;

test=[NSString stringWithFormat:@"i'm %d years old!",23];

若在声明方法时在方法前面添加了加号,那就表示把这个方法定义为类方法【这个方法属于类对象,而不是类的实例对象。】

NSArray类:可以存放任意类型的对象.

它有两个*:

1. 它只能存储objective-c的对象,但不能存储C中的基本数据类型,如int , float, enum, struct等。

2.不能存储nil(对象的零值或NULL值);【因为在创建NSArray时,要在列表结尾添加nil代表列表结束。】

创建NSArray:

NSArray *array;

array=[NSArray arrayWithObjects:@"one",@"two",nil];

NSString, NSMutableString类;

【NSString是不可变的,即一旦创建完成,就不能通过删除字符或添加字符的方式来改变它;

而NSMutableString是可变的。

这两个类就像JAVA中的string与stringBuffer类的区别。】

NSArray, NSMutableArray类;

NSEnumerator枚举;



NSEnumerator *emun;

Emun=[array objectEnumerator];

Id thingie;

While(thingie=[enumerator nextObject]){}



NSDictionary:字典(关键字及其定义的集合。)【也成为散列表,关联数组】,NSMutableDictionary类;

NSNumber:用来包装基本数据类型,如int ,char, float, bool;【将一个基本类型的数据包装成对象叫做装箱。】

NSValue:它可以包装任何类,NSNumber是它的子类。

NSNull:

在cocoa中看到“CF”字样时,就表示它是苹果公司的Core Foundation 框架相关的内容。

NSAutoreleasePool:自动释放内存池。

4.

内存管理

每个对象都有一个与之关联的引用计数(也叫保留计数)

当使用alloc, new 方法或通过 copy消息(生成接收对象的一个副本)创建一个对象时,对象的引用计数值被设为1;

给对象发retain消息时,增加该值;

发送release消息时,减少该值;

当一个对象的引用计数值变为0时,objective-c会自动向对象发送一条dealloc消息。销毁该对象。

你可以在自己的对象中重写该方法,

使用retainCount消息,可以获取引用计数器的值。

-(id) retain;

-(void) release;

-(unsigned) retainCount;

自动释放池:autorelease pool;

创建:

NSAutoreleasePool *pool;

pool=[[NSAutoreleasePool alloc] init];

销毁:

[pool release];

注意:xcode自动生成的代码,销毁pool池时,使用的是[pool drain],drain方法只是清空释放池,但不销毁pool.所以在自己编写代码时还是使用release.

而且,drain只适用于MAC OS 10.4以上的版本,而release适用于所有版本。

只有在向某个对象发送autorelease消息时,该对象才会添加到NSAutoreleasepool中,才会被自动释放。

如:[car autorelease];

内存管理黄金准则:

只有通过alloc, new和 copy方法创建的对象,才需要程序员负责向该对象发送release或autorelease消息。

而通过其他方法获得的对象,则默认为已经被设置为自动释放,所以不需要程序员做任何操作了。

在objective-c 2.0中有垃圾回收机制,

如果要对某个项目使用垃圾回收:

项目信息--build选项卡--查询"garb",出现“objective-c Garbage Collection”,将其值设置为“required[-fobjc-gc-only]”

启用垃圾回收后,通常的内存管理命令全都变成了空操作指令,不执行任何操作。

开发iphone软件,不能使用垃圾回收。

5.

对象初始化

两种创建新对象的方法:

[类名 new]

[[类名 alloc] init]

这两种方法是等价的,但cocoa的惯例是使用后者。

alloc在为对象分配空间的同时,将这块内存初始化为0;

Init方法:初始化实例变量,使对象处于可用状态。[返回类型为id, 返回的值描述了被初始化的对象]

使用new创建新对象时,系统要完成两个步骤:

1. 为对象分配内存,即对象获得一个用来存放其实例变量的内存块;

2. 自动调用init方法,让该对象处于可用状态。

6.

objective-c 2.0的新特性【只适用于mac os x10.5及以上】

@property :表示声明了对象的属性。【这样就不用再写属性的访问器了。】

(他有copy, retain, readwrite, readonly等属性)

@synthesize:表示“创建该属性的访问器”

点表达式

7.

类别

类别(category)是一种为现有的类添加新方法的方式。

类别的声明:

@interface NSString (NumberConvenience) //类名 (类别名)

-(NSNumber) lengthAsNumber; //扩充方法声明

@end

使用时使用原来的类名,就可以调用他的所有类别中的方法。

类别的局限性:

1. 不能向类中添加新的实例变量;

2. 在类别中的方法若与类中现有的方法重名,则类中的方法不可用,被类别中的新方法取代。

类别的作用:

1. 将类的实现分散到多个文件或框架中;

2. 创建对私有方法的前向引用;

【Cocoa中没有真正的私有方法,则实现私有方法类似功能的方法为:

先在类别中声明方法;然后到现有类的实现中实现该方法。

这样这个类中的其他方法可以使用该方法,而其他外部的类就不会知道该方法的存在了。】

3. 向对象添加非正式协议。

【创建一个NSObject的类别称为创建一个非正式协议。】

委托delegate是一种对象,另一个类的对象会要求委托对象执行它的某些操作。

受委托对象在某个时间(某个事件触发)时,会自动通知委托对象执行委托方法。

选择器:@selector():选择器只是一个方法名称,但它以objective-c运行时使用的特殊方式编码,以快速执行查询。圆括号中的内容是方法名。

所以Car类的setEngine:方法的选择器是:@selector(setEngine:

受委托对象如何知道其委托对象是否能处理它(受委托对象)发送给它(委托对象)的消息?

通过选择器,受委托对象先检查委托对象,询问其是否能响应该选择器。如果能,则向它发送消息。

8.

协议:

正式协议是一个命名的方法列表。

采用协议意味着必须实现该协议的所有方法。否则,编译器会发出警告。

正式协议就像JAVA中的接口一样。

声明协议:

@protocal NSCopying

-(id) copywithzone:(NSZone *) zone; //方法列表

@end

采用协议:

@interface Car:NSObject <NSCopying,NSCoding> //中括号中是要实现的协议列表

{//实例变量列表}

//方法列表

@end

在objective-c 2.0中,有新特性:@optional, @required

9.

AppKit:

创建APPKIT项目:

File—new project—mac os—application—Cocoa application;

IBOutlet与IBAction

这两个都是APPKIT提供的#defines.

IBOutlet没有任何作用,不会对它进行编译。

IBAction定义为void。

这两个是为Interface Builder以及阅读代码的人提供的标记。

.xib文件一般称为.nib文件。

.nib文件是包含被冻结对象的二进制文件。

而.xib文件是XML格式的nib文件。

热心网友 时间:2022-06-29 00:06

单一继承: Objective-C不支持多重继承,(同Java和Smalltalk),而C++语言支持多重继承。 动态: Objective-C是动态定型(dynamicaly typed)所以它的类库比C++要容易操作。Objective-C 在运行时可以允许根据字符串名字来访问方法和类,还可以动态连接和添加类。 C++ 跟从面向对象编程里的Simula 67(一种早期OO语言)学派,而Objecive-C属于Smalltalk学派。 在C++里,对象的静态类型决定你是否可以发送消息给它,而对Objective-C来说,由动态类型来决定。Simula 67学派更安全,因为大部分错误可以在编译时查出。 而Smalltalk学派更灵活,比如一些Smalltalk 看来无误的程序拿到Simualr 67那里就无法通过。 从很多方面来看,C++和Objective-C的差别,与其说时技术上的, 不如说是思维方式上的。你是否想更安全而舍弃灵活性?Simular67学派的支持者声称既然程序设计出色何必再要灵活性(谎话!),而 Smalltalk学派则辩称为了灵活可以容忍运行时多出错(也是谎话!)

参考资料:百度百科

热心网友 时间:2022-06-29 00:07

Objective-C,是在C的基础上,加入面向对象特性扩充而成的编程语言。Objective-C主要应用於Mac OS X和iOS 系统,可以在任何gcc支持的平台上进行编译,因为gcc原生支持Objective-C。
程序例子:
#import<Foundation/Foundation.h>
int main(int argc, char *argv[]){
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSLog(@"Hello World!");
[pool drain];
return 0;
}
--
C++ 是在C基础上加了class 等新东西而成的编程语言,可以把C看成是C++的一部分。可以用它写面向对象的程序,也可以写以过程为主的程序。C++ 已得到广泛(远比objective-c广泛)应用,用于各种平台。
--
Objective-C 不用“函数调用”,而用互相传递讯息。
Objective-C 类分为Interface和implementation两块。
Objective-C 构建对象 分为两块 alloc (内存分配)以及init(初始化)
Objective-C 协议分为非正式协议和正式协议
..... (请自己参考书籍或资料)

热心网友 时间:2022-06-29 00:08

1、Objective C基本上是在C + Smalltalk基础上衍生出来的,C++就是C++。除了都是从C语言分化出来的以外,完全没有任何共性。
2、最大的区别就是Objective C的成员函数调用是基于动态绑定的,类本身并没有*对象可以有什么函数。相对于C++类会规定好成员有什么函数。这使得Objective C的灵活性很大,但是执行效率也很低。
3、在NeXT系统的时代C++和Objective C都不是那么大众的东西,C++也还没完善,而且那个时代编译器的有优化能力也没现在那么*。所以选择Objective C也不是很奇怪的事。但是现在Objective C的劣势就越来越明显了,所以苹果开发了Swift,而且就内部消息苹果很可能会准备放弃OC。

热心网友 时间:2022-06-29 00:08

我现在的工作中,两种语言都用。
在这里只想说一点,是我觉得两种语言差别最大的地方。
C++中,你是使用对象(当然有时直接用类)调用方法,这个方法必须是该对象(类)实现了的。
objective-c中,是发送消息的概念,你甚至可以给一个对象(类)发送它不响应的消息(它没有的函数)。

总的来说,Objective-c比C++更加的动态,多了很多运行时的特征。
Objective-C和C的区别

1.性质不同 Objective-C,通常写作ObjC或OC和较少用的Objective C或Obj-C,是扩充C的面向对象编程语言。C语言是一门面向过程、抽象化的通用程序设计语言,广泛应用于底层开发。2.特点不同 Objective-C是非常实用的语言。它是一个用C写成很小的运行库,令应用程序的尺寸增加很小,和大部分OO系统使用...

Objective-C和C的区别

Objective-C是C的超集,但它也不视C的基本型别为第一级的对象。和 C++不同,Objective-C 不支持运算子重载 (它不支持ad-hoc多型),而且与 C++不同,但和 Java 相同,Objective-C 只容许对象继承一个类别 (不设多重继承)。Categories 和 protocols 不但可以提供很多多重继承的好处,而且没有很多...

Objective - C和C语言的异同。

和C++不同,Objective-C不支援运算子多载(它不支持ad-hoc多型)。亦与C++不同,但和Java相同,Objective-C只容许对象继承一个类别(不设多重继承)。Categories和protocols不但可以提供很多多重继承的好处,而且没有很多缺点,例如额外执行时间过重和二进制不兼容。

objective c和c的区别

最大的区别就是Objective C的成员函数调用是基于动态绑定的,类本身并没有限制对象可以有什么函数。相对于C++类会规定好成员有什么函数。这使得Objective C的灵活性很大,但是执行效率也很低。在NeXT系统的时代C++和Objective C都不是那么大众的东西,C++也还没完善,而且那个时代编译器的有优化能力也没现...

为什么说Objective-C很难学

Objective-C 比 C 简单,比C 方便 个人认为,Objective-C只是 C 的子集(理念上这么认为,实际上他们是不同的语言),然后让C 里面一些可选的框架,比如COM,全局统一基类,在objc中成为标配。如果你是从C入门,然后学了C ,再过来学Objective-C 基本上一周时间就可以上手开发工作了。如果...

C++ Objective-C C 这三种语言各有什么优缺点

C++有一种说法是C的扩展。C++支持面向对象,而C是面向过程的语言。C语言写的代码是可以直接被C++程序调用的,在C++的开发环境下是可以写纯C语言的。要说各自的优缺点如果只在这两种语言中来说的话C++要比C高级,功能更强大。但是底层传输开发或者硬件开发还是C语言。Objective-C是也是C的面向对象...

Objective-C最接近C、C++、C#哪一种?

1.Objective-C是C的严格超集,也就是说标准C编写的代码可以作为Obj-C的代码直接编译。所以说这里“基础”就是标准C语言的基础,毕竟是"包含"的关系~2.差不多~3.4.掌握Objective-C的同时也就掌握了C,所以有些C基础会好些,同时最好理解面向对象的编程概念(就是说如果了解C++或Java这样面向对象的...

objective-c与C++的区别

Objective-C,是在C的基础上,加入面向对象特性扩充而成的编程语言。Objective-C主要应用於Mac OS X和iOS 系统,可以在任何gcc支持的平台上进行编译,因为gcc原生支持Objective-C。程序例子:#import&lt;Foundation/Foundation.h&gt;int main(int argc, char *argv[]){NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] ...

学习objectivec一定要先学c吗?

可以没有C的基础。与C在语法上还是有些区别的,当然有C的基础最好了,对理解obj-c的内存管理方面是有帮助的。虽然 Obj-C 是 C 的超集,但是和 C 是两种世界观。(面向过程 和 OO )的确, C 也可以 OO 。甚至可以说, Obj-C 不就是 C 的非常好的 OO 的例子之一嘛~不过,没有见过好的...

Objective-C学习笔记(1)——OC的基本概念和类

1. 基本概念OC(Objective-C)与C程序的区别在于它的面向对象特性,以及预处理指令#import的用法。#import不仅包括了#include的功能,还能避免重复包含,确保每个文件只被包含一次。框架是预先编写的功能集合,如Foundation框架,提供了基础输入输出和数据类型支持。通过包含Foundation.h,可以直接使用其内的所有...

Objective-C objective object C USB A和C的区别 C to c A和C区别 D和C有什么区别 排列A和C区别 指数A和指数C有什么区别
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...关于创意内容的。我们要写三篇感恩教官,感恩辅导员,感恩代班学 ... ...E的定义式为E=Fq,根据此式,下列说法中正确的是( )①上式说明电场中... 温碧泉蓝皙润白精华霜的延展性怎么样? 为什么我的QQ上不能显示我在玩QQ飞车? 为什么只有耍QQ飞车的时候QQ上看不到呢 qq飞车好友上线我怎么看不到啊 在玩QQ飞车游戏时,对方QQ上不显示我正在飞车游戏中是怎么回事? 有没有传奇游戏游戏窗口化工具啊? 吻戏最多的5部剧 小型犬用不用办狗证 怎么办理 重温驾考,科目三上车前的七个步骤究竟是怎样的? 近现代瓷器中哪些品种值得收藏 有谁知道蓝牙怎么批量传输歌曲文件 aj11鞋带怎么系 岳飞抗金时的传说 AppCan怎样禁止返回上一页 哪些瓷器值得收藏 TcL空调开关按扭在哪 安吉白茶的历史渊源 “五证合一”是什么,能给企业带来哪些好处 新的尼康D5300为什么连接不上WiFi? 什么样的高古瓷器最值钱最有价值 哪些民窑瓷器值得收藏? 百分悬赏,关于 安吉春节民俗文化之变迁 文章 五证合一,合成的是什么?(答案为8个字) 五证合一指的什么 android日期选择器 根据时间判断是上午还是下午 仿ios 五证合一是哪五证? 办理流程是怎样? IOS 下有像QQ那样的cordova或者javascript文件选择器么 24孝“郭讵藏子”的故事,听说是发生在浙江省安吉县的孝丰镇 不知道是不是真的? 金兀术真的是被牛皋气死的吗 什么样的瓷器最值钱? 安吉人过清明节有哪些习俗 窗帘装罗马杆注意什么 收藏什么瓷器好? 五证合一具体是什么意思 科目三操作流程,学员跟着做,准能通关 电视购物是否存在诈骗?如何分辨真假? 请高人看下这古瓷瓶是什么底款,多少价位值得收藏吗 建行的理财产品有中等风险和低风险产品,中等风险的可以买吗? aj11 怎么系鞋带 怎么样穿能把鞋带隐藏起来? 科目三c2考试流程? 板鞋鞋带怎样系能把结给隐藏了? 河北驾考,科目三考试,终点停车,详细过程是怎样的? 请问这个鞋带的系法是怎么隐藏绳结的 您好!建设银行低风险理财产品有风险吗? 教练:科目三练车时记住这几个步骤,考试包你一次过 AJ11低帮鞋带多长? 建行的理财产品能买吗