標籤:
在學習完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的轉換。
iOS學習第一天(Objective-C語言的類/繼承)