Objective-C学习笔记第三章面向对象编程

第三章面向对象编程

一、间接(inderection)

即使用某种东西指向你想要的对象,或使用某事物代为办理某种工作

1、变量与间接

举例代码:

int i;

int count = 5;

for(i = 1; i <= count; i++){

         NSLog(@"%d\n",i);

}

 

其中count就是间接

 

2、文件名的间接

将处理内容保存到外部文件,使用文件流读取

 

二、在面向对象编程中使用间接

// Draw the shapes

 

void drawShapes (id shapes[], int count)

{

         int i;

        

         for (i = 0; i < count; i++) {

                   id shape = shapes[i];

                   [shape draw];

         }

        

} // drawShapes

 

代码解释:

1  id代表identifier标识符,id是一种泛型,用于表示任何种类的对象,是一个指针指向     某个结构struct

2  [shape draw]

         C语言中[]方括号用于引用数组元素

         Objective-C中用于通知对象进行某种操作,在这里就是调用shape对象的draw方法

 

 

三、Objective-C中的OOP

@interface接口,定义类的公共接口

创建类对象之前,Objective-C编译器需要读取类内部信息,使用@interface可以把信息传递给编译器

示例代码:

@interface Circle:NSObject              表示为Circle类定义的接口,并且Circle类继承自NSObject

{                                                                括号内是Circle类的数据成员

         ShapeColor       fillColor;            名为fillColorShapeColor类对象

                                                                 其值为Circle类对象的实例变量

         ShapeRect        bounds;             名为boundsShapeRect类对象

}

- (void) setFillColor : (ShapeColor) fillColor;               (ShapeColor)表示需要的参数类型

- (void) setBounds : (ShapeRect) bounds;                  :冒号表示方法需要参数

- (void) draw;   方法声明,前面的短线表明这是Objective-C的方法声明,

                            这是区分函数原型与方法声明的方式,函数原型中没有先行短线

                            表示这是一个新方法

                            void表示无返回值

@end //Circle  表示已经完成了Circle类的声明

Objective-C方法可以返回与C相同的类型:标准类型(整型、浮点型和字符型)、指针、对象引用和结构

 

 

中缀符(infix notation)

Objective-C中有中缀符的语法,即方法的名称及其参数时和在一起的

例如,调用方法时将参数传入

[circle       setFillColor  :  red]

带两个参数的方法调用

[textThing         setStringValue :  @"hello there" color:blue ]

 

 

C中调用函数则直接把参数放在方法名之后,例:setTextThingValueColor(textThing, @"hello there" , blue);

 

 

@implementation实现,即接口的实现类

举例代码:

@implementation Circle          编译器指令,表示为某个类提供代码编译器指令后不用书写分号

 

- (void) setFillColor : (ShapeColor) c          c为形式参数,为避免名称冲突不使用传入时的名称

{

         fillColor = c;

}//setFillColor

                                                                                                                                                    

-(void) setBounds :(ShapeRect) b              b是随着隐藏参数self传递来的,方法调用时会将自身

{                                                                         对象隐蔽的传度过来

         bounds = b;

}//setBounds

 

-(void) draw                                                                                方法定义不必按照@interface中的顺序

{                                                                                                     出现,甚至可以书写无声明的方法该方法

         NSLog(@"drawing a circle at                                               将成为实现类的私有方法(Objective-C

                   (%d %d %d %d) in %@",                                       中并不存在真正的私有方法,即无法将方

                   bounds.x,bounds.y,bounds.width,                     法隐藏)

                   bounds.height,colorName(fillColor));

}//draw

 

 

实例化(instantiation)对象

创建新对象需要发送new消息

举例代码:

int main (int argc, const char * argv[])

{

         id shapes[1];                                                   定义类型为id指针,长度为1名字为shapes的数组

         ShapeRect rect0 = {0,0,10,30};                 定义一个矩形并为其提交4个坐标点参数

         shapes[0] = [Circle new];                                      为数组第一个元素实例化一个Circle

         [shapes[0] setBounds : rect0];                  数组元素调用Circle类的方法

         [shapes[0] setFillColor : kRedColor];

         return(0);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值