在学习完c语言之后,今天开始了对OC语言的学习,今天主要学习的是对OC中的类进行说明和继承。
1、类的定义和使用
在文件夹上右击,选择New File...-Cocoa Class-输入类的名称-Creat。即可新建一个类。注意,选择要继承的类为NSObject
首先在所建立的.h文件中进行对类的声明部分,之后在.m文件中进行对类的实现部分。
对类声明部分的语法:
@interface 类的名字:父类的名字
{
类的数据的定义
}
@end
对类的实现部分的语法:
@implementation 类的名字
行为的实现
@end
如我们求1~100之和的函数中,.h文件中对类进行声明:
#import <Foundation/Foundation.h>
@interface LYSum : NSObject
{
int n;
}
-(void)setN:(int)_n;
-(int)sum;
@end
.m文件中对类实现的部分:
#import "LYSum.h"
@implementation LYSum
-(void)setN:(int)_n
{
n = _n;
}
-(int)sum
{
int s=0;
for(int i=0;i<=n;i++)
{
s+=i;
}
return s;
}
@end
最后在main.m文件中对类的行为进行实现,main.m文件中的代码:
#import <Foundation/Foundation.h>
#import "LYSum.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
LYSum * sum = [[LYSum alloc]init];//注意这里的固定用法
[sum setN:100];
int s = [sum sum];
NSLog(@"%d",s);
}
return 0;
}
2、类的继承和init函数
在作图函数中LYShape.h文件对类进行的定义:
#import <Foundation/Foundation.h>
@interface LYShape : NSObject //对NSObject进行继承
{
int width;
int height;
}
-(id)initWithWidth:(int)_width andWithHeight:(int)_height; //定义一个新函数,使width和height能够在一个函数中出现
-(int)area;
@end
在LYShape.m文件中对两个函数进行说明部分:
#import "LYShape.h"
@implementation LYShape
- (id)init //重写父类里的init
{
self = [super init];
if (self) {
width = 0;
height = 0;
}
return self;
}
-(id)initWithWidth:(int)_width andWithHeight:(int)_height //初始化行为
{
//必须去调用父类的初始化行为
self = [super init];
if(self) //如果父类初始化成功
{
//初始化自己的数据
width = _width;
height = _height;
}
return self;
}
-(int)area
{
return width*height;
}
@end
之后,LYCircle对LYShape进行继承,LYCircle.h中的代码:
#import "LYShape.h"
@interface LYCircle : LYShape //对LYShape进行继承
-(id)initWithRad:(int)_rad;
-(double)area;
@end
LYCircle.m中的代码:
#import "LYCircle.h"
@implementation LYCircle
-(id)initWithRad:(int)_rad
{
self = [super initWithWidth:_rad andWithHeight:_rad]; //使用super代表调用父类的函数
return self;
}
-(double)area
{
return 3.14*[super area]; //同理,需要调用父类函数来计算圆的面积
}
@end
最终,main.m中的代码:
int main(int argc, const char * argv[]) {
@autoreleasepool {
//图形
LYShape * s =[[LYShape alloc]initWithWidth:10 andWithHeight:20];
NSLog(@"%d",[s area]);
//圆形
LYCircle * circle = [[LYCircle alloc]initWithRad:10];
NSLog(@"%g",[circle area]); //%g可以输出一个整数
}
return 0;
}
第一天学习到的东西并不是很多,但是我们对于这个语言有了一个整体的认识,可以很快完成从C到OC的转换。