objective - C 阅读笔记,与c++的相似与不同之处

一,类的定义

@interface Circle : NSObject //类的定义放在.h文件中

{

ShapeColor fillColor;

ShapeRect bounds; //数据成员

}

//void类型方法,带有一个ShapeColor类型形参

- (void) setFillColor : (ShapeColor) fillColor;

//void类型方法,带有一个ShapeRect类型形参和一个int型形参,setBounds:和atindex:

- (void) setBounds : (ShapeRect) bounds

atIndex : (int) index;

//void类型方法,不带参数.

- (void) draw;

@end //完成声明

二,类的实现部分(代码存放于.m文件中[相当于c++中的.cpp文件])

@implementation Circle

- (void) setFillColor : (ShapeColor) c

{ fillColor = c ; }

- (void) setBounds : (ShapeRect) b

atIndex : (int) index;

{ bounds = b ; index++; }

- (void) draw

{ NSLog(@"drawing a circle at (%d,%d,%d,%d) in %@"),

bounds.x , bounds.y , bounds.width , bounds.height,

colorName(fillColor));

}

//colorName是一个返回说明颜色的NSString类型字符串的方法

@end //没有分号

三,调用带参方法(使用前文所建类的方法)

① 例:一个带一个参数的方法( object - c ):

[ circle setFillColor : kRedColor ]

一个带一个参数的方法(c++):

circle.setFillColor(kRedColor);

② 例:一个带两个参数的方法( object - c ):

[ circle setBounds : bound

atIndex : 1];

一个带两个参数的方法(c++):

circle.setBounds(bound , 1);

四,new语句

id shape[3] ;

shape[0] = [Circle new] // [ 类 new ]

用c++表示:

Circle (*shape)[3];

shape[0] = new Circle();

五,类的继承

//Circle类从Shape类继承所有变量以及方法

@interface Circle : Shape

@end

/**假设Shape类中含有空方法 - (void) draw{} 则可在Circle的实现中对draw方法进行重构 **/

@implementation Circle

- (void) draw

{ NSLog(@"........");}

@end

六,复合 -- 对象间的组合,形成新的类(与继承比较)

继承 --- "is a", 具有"是一个"关系 ,"X是一个Y",使用继承.

复合 --- "has a",具有"有一个"关系,"X有一个Y",使用复合.

七,@class

在.h文件中定义类时使用@class声明一个未包.h头文件的类,可使编译通过,并正常使用.当然要在主程序中把需要的头文件包括完整.

这个操作相当于告诉编译器:"相信我,你以后会知道这个类是怎样的."