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