C13_OC03-面向对象
来源:互联网 发布:徐州淘宝店铺装修 编辑:程序博客网 时间:2024/06/17 00:55
1.从类到对象的调用
#import <Foundation/Foundation.h>/* @interface 声明类时使用的关键字 Persion 类名 : 继承 NSObject OC中的基类 */@interface Persion : NSObject /* 大括号内包裹类的属性 */ { //外部实体(对象)可以访问 @public int age;//只允许声明,不允许初始化 int sex; } /* 声明类的方法 - 动态方法,对象调用。+为静态方法 (void) 返回值 run 方法名 : 参数分隔符 (int) 参数类型 i 参数名 and: 后面还有参数。and是自定义的参数描述符 */ - (void) run; - (void) eat:(int)i; - (void) eatMore:(int)i and: (NSString *)food;//必须有的结束标识@end/* 实现方法: @implementation实现方法使用的关键字 Persion类名*/@implementation Persion//方法的声明语句改除分号为大括号- (void) run{ //功能语句 NSLog(@"跑起来"); } - (void) eat:(int)i{ NSLog(@"吃起来,吃%d个", i); } - (void) eatMore:(int)i and: (NSString *)food{ NSLog(@"吃%d个%@", i, food);//%d对应int,%@对应字符串 }//必须有的结束标识@endint main(){ /* 创建对象: *p 对象指针,指向对象本身 [Persion new] 返回对象的内存地址 */ Persion *p = [Persion new]; /* 操作属性: (*P).age (*p)即对象,使用点方法访问属性,类似于Java P->sex p即对象地址,使用->指向属性,同C语言中结构体指针用法 */ (*p).age = 35; p->sex = 0; NSLog(@"年龄:%d", p->age); NSLog(@"性别:%d", (*p).sex); /* 调用方法: OC中调用方法时必须使用中括号包裹 [对象 方法:参数 and:其它参数]; */ [p run]; [p eat:2]; [p eatMore:1 and: @"Apple"]; return 0;}
2.对象和自定义函数
#import <Foundation/Foundation.h>@interface Persion : NSObject { @public int age; int sex; } - (void) run; //OC对象的方法声明@end@implementation Persion - (void) run{ //这里最终调用实例对象的属性 NSLog(@"跑了:%d, %d", age, sex); }@end// 自定义函数void test(Persion *pp){ NSLog(@"型参pp地址:%p", pp); //0x7ff521c02c80。和main中定义的对象是同一个 pp->age = 88; Persion *ppp = [Persion new]; NSLog(@"ppp地址:%p", ppp); //0x7ff521c0caf0 ppp->age = 64; ppp->sex = 51; pp=ppp; NSLog(@"pp地址:%p", pp); //0x7ff521c0caf0。和本函数中定义的是同一个 pp->age = 99;}int main(){ Persion *p = [Persion new]; NSLog(@"p地址:%p", p); //0x7ff521c02c80 (*p).age = 35; p->sex = 0; //调用自定义函数 test(p); NSLog(@"年龄:%d", p->age); //88 NSLog(@"性别:%d", (*p).sex); //0 [p run]; //88, 0 return 0;}
3.OC的函数和对象方法
#import <Foundation/Foundation.h>/* 方法的声明必须写在main之前-使用之前 */@interface Persion : NSObject /* OC对象的方法只能在定义类时声明。属于面向对象的范畴 以+、-开头 返回值类型使用()包裹 参数类型使用()包裹。如果没有参数,就直接以分号结束 */ - (void) run;@endvoid test();/* 方法的实现可以放在main之后 */@implementation Persion //OC对象的方法只能在这里实现 - (void) run{ NSLog(@"OC对象的方法"); test(); //在OC对象的方法中,调用已经声明的普通函数 }@end//OC中的函数、自定义函数。不依赖于对象存在,如同C语音,是面向过程的void test(){ NSLog(@"OC自定义函数");}int main(){ Persion *p = [Persion new]; [p run]; //OC对象的方法只能通过对象调用 test(); //普通函数的调用。和C一样,先声明,再使用。和OC对象没有任何关系 return 0;}
4.各种属性
#import <Foundation/Foundation.h>typedef enum{ sexMan, sexWoman}Sex;typedef struct{ int yesr; int month; int day;}Date;@interface Dog : NSObject { NSString *name; } -(void)run;@end@implementation Dog -(void)run{ NSLog(@"狗狗跑"); }@end@interface Persion : NSObject { @public //后续属性可被公开访问 Sex sex; Date birthday; NSString *name; Dog *dog; } - (void) toString; -(void)letDogRun;@end@implementation Persion -(void) toString{ NSLog(@"姓名:%@,性别:%d,生日:%d-%d-%d", name, sex, birthday.yesr, birthday.month, birthday.day); } -(void)letDogRun{ NSLog(@"让狗跑,"); [dog run]; }@endint main(){ Persion *p = [Persion new]; p->sex = sexMan; Date date = {1987, 3, 1}; p->birthday = date; p->name = @"Vigiles"; p->dog = [Dog new]; [p toString]; [p letDogRun]; return 0;}
5.OC对象方法
#import <Foundation/Foundation.h>@interface Persion : NSObject - (void) func1; //- (int) func1; //返回值虽然不同,方法名仍不能相同 - (int) func1:(int)i; //这个方法的名称是func1: ,冒号也是方法名的一部分 //一个参数,对应一个冒号。这个方法的名称是func2withArg1:withArg2:withArg3: - (int) func2withArg1:(int)i withArg2: (int)j withArg3: (int)k;@end@implementation Persion - (void) func1{ NSLog(@"xxx"); } - (int) func1:(int)i{ return i; } - (int) func2withArg1:(int)i withArg2: (int)j withArg3: (int)k{ return i+j+k; }@endint main(){ Persion *p = [Persion new]; NSLog(@"调用无参方法"); [p func1]; NSLog(@"调用有参方法:%d", [p func1:6]); NSLog(@"调用多参方法:%d", [p func2withArg1:9 withArg2:8 withArg3:4]); return 0;}
- end
0 0
- C13_OC03-面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- windows7下的eclipse运行Mapreduce程序的配置
- 集合总结
- C12_OC02-OC较C的不同
- 如何学习的进步的速度最快了?
- uva10719
- C13_OC03-面向对象
- 【Qt】Qpainter制作二维图
- C++中int型与string型互相转换
- [学习中的错误记录]
- C++动态申请数组和参数传递问题
- LeetCode Sqrt(x)
- VS2005的配置问题-mainifest 查看所需依赖项
- Codeforces 425B
- java File类的基本操作