Object-C学习 属性、点语法练习

  因为要熟悉内存管理, 所以练习是在MRC环境下实现的。要求实现的功能是:

 在MRC模式下用属性语法和点语法模拟实现以下内容:一个人工作挣钱,有一天终于攒够了钱,买了一个房子,然后找了一个对象结婚。后来婚姻出现了第三者,两人离婚后此人卖掉了房子,最终和第三者结婚。

 首先创建Person和House两个类, 并且两个类是互相复合的,即用@class和#import。

 下面是House类中的.h文件中的代码:

@class Person;

@interface House : NSObject


@property(nonatomic, retain) Person *owner;

@property(nonatomic, retain) NSString *address;

@property(nonatomic, assign) float area;

@property(nonatomic, assign) float price;



//  初始化

- (id)initWuithOwner:(Person *)owner

             Address:(NSString *)address

                Area:(float)area

               Price:(float)price;

//  估价

- (float)wholePrice;


//  升值

- (House *)appreciate;


@end


然后是.m文件:

- (id)initWuithOwner:(Person *)owner

             Address:(NSString *)address

                Area:(float)area

               Price:(float)price

{

    self = [super init];

    if (self) {

        self.owner = owner;

        self.address = address;

        self.area = area;

        self.price = price;

    }

    return self;

}




- (float)wholePrice

{

    int s = self.area * self.price;

    return s;

}



- (House *)appreciate

{

    self.price += 10;

    [self wholePrice];

    return self;

}


然后是Person类:

@class House;

@interface Person : NSObject


@property(nonatomic, retain) NSString *name;

@property(nonatomic, retain) NSString *sex;

@property(nonatomic, assign) int age;

@property(nonatomic, assign) int wage;

@property(nonatomic, assign) int money;

@property(nonatomic, retain) Person *spouse;

@property(nonatomic, assign) BOOL ismarried;//   bool类型要用assign

@property(nonatomic, assign) BOOL ishouse;

@property(nonatomic, retain) House *ownhouse;


//  初始化

- (id)initWithName:(NSString *)name

               Sex:(NSString *)sex

               Age:(int)age

              Wage:(int)wage

             Money:(int)money

            Spouse:(Person *)spouse

         IsMarried:(BOOL)ismarried

           IsHouse:(BOOL)isHouse

          Ownhouse:(House *)ownhouse;



//  挣钱

- (int)getMoney;



//  买房子

- (void)buyHouse:(House *)hou;


//  结婚

- (void)getMarried:(Person *)a;


//  卖房子

- (void)sellHouse:(House *)hou;


//  离婚

- (void)divorce:(int)month;


//  介绍

- (void)introduce;


@end


- (id)initWithName:(NSString *)name

               Sex:(NSString *)sex

               Age:(int)age

              Wage:(int)wage

             Money:(int)money

            Spouse:(Person *)spouse

         IsMarried:(BOOL)ismarried

           IsHouse:(BOOL)isHouse

          Ownhouse:(House *)ownhouse

{

    self = [super init];

    if (self) {

        self.name = name;

        self.sex = sex;

        self.age = age;

        self.wage = wage;

        self.money = money;

        self.spouse = spouse;

        self.ismarried = ismarried;

        self.ishouse = isHouse;

        self.ownhouse = ownhouse;

    }

    return self;

}


- (int)getMoney

{

    self.money += self.wage;

    return self.money;

}


- (void)buyHouse:(House *)hou

{

    self.ishouse = YES;

    hou.owner = self;

    self.money -= [hou wholePrice];

    self.ownhouse = hou;

    

    NSLog(@"已买房子, %@还剩%dRMB",

          self.name, self.money);

}


- (void)getMarried:(Person *)a

{

    self.ismarried = YES;

    self.spouse = a;

    self.spouse.ishouse = YES;

    NSLog(@"%@终于和%@结婚啦, 而且开始吃软饭了。",

          self.name, self.spouse.name);

}


- (void)sellHouse:(House *)hou

{

    self.ishouse = NO;

    self.money += [hou wholePrice];

    NSLog(@"已卖掉房子, %@所剩钱数为%dRMB.",

          self.name, self.money);

}


- (void)divorce:(int)month

{

    

    for (int i = month; i > 0; i--) {

        [self.ownhouse appreciate];

    }

    //[self.ownhouse appreciate:month];

    NSLog(@"%d个月后,由于出现第三者%@竟然变心了并且和%@离婚了。",

          month, self.name, self.spouse.name);

    self.ismarried = NO;

    self.spouse.ismarried = NO;

    self.spouse = nil;

}


- (void)introduce

{

    if (self.ismarried) {

        if (self.ishouse) {

            NSLog(@"大家好, 我叫%@ 性别%@ 今年%d岁, 我已经结婚了, 我的另一半叫%@ 我们住在一套%.2f平的房子里, 地址是%@. ",

                  self.name, self.sex, self.age, self.spouse.name, self.ownhouse.area, self.ownhouse.address);

        }else {

            NSLog(@"大家好, 我叫%@ 性别%@ 今年%d岁, 我已经结婚了, 我的另一半叫%@ 我们至今还没有自己的房子. ",

                  self.name, self.sex, self.age, self.spouse.name);

            

        }

        //        NSLog(@"大家好, 我叫%@ 性别%@ 今年%d岁, 我已经结婚了, 我的另一半叫%@. ",

        //              self.name, self.sex, self.age, self.spouse.name);

    }else {

        if (self.ishouse) {

            NSLog(@"大家好, 我叫%@ 性别%@ 今年%d岁, 我有一套%.2f平的房子, 地址是%@ 至今未婚, 有意者请联系我,联系方式:110119",

                  self.name, self.sex, self.age, self.ownhouse.area, self.ownhouse.address);

            

        }else{

            NSLog(@"大家好, 我叫%@ 性别%@ 今年%d岁, 至今未婚, 有意者请联系我,联系方式:110119",

                  self.name, self.sex, self.age);

        }

        

    }

}


  我之所以要设计一个introduce方法是想通过里面的if else语句检验上面的各种方法是否实现正确。

  最后是主函数中的试验:

        Person *dd = [[[Person alloc] initWithName:@"穷屌丝" Sex:@"" Age:31 Wage:50000 Money:0 Spouse:NO IsMarried:NO IsHouse:NO Ownhouse:nil] autorelease];

        

        Person *apo = [[[Person alloc] init] autorelease];

        apo.name = @"包租婆";

        

        Person *bb = [[[Person alloc] init] autorelease];

        bb.name = @"白富美";

        

        Person *ss = [[[Person alloc] init] autorelease];

        ss.name = @"小三";

        

        House *house1 = [[[House alloc] initWuithOwner:apo Address:@"长江路88" Area:30 Price:10000] autorelease];

        

        int month = 0;

        while (dd.money < [house1 wholePrice]) {

            [house1 appreciate];

            [dd getMoney];

            month++;

        }

        NSLog(@"经过%d个月的努力奋斗, %@终于攒够钱能买%@的房子了",

              month, dd.name, house1.owner.name);

        

        [dd buyHouse:house1];

        [dd introduce];

        

        [dd getMarried:bb];

        [dd introduce];

        

        

        //  输入了几个月,因为设定结婚的这几个月dd是没有工作的,所以dd剩的钱就是卖掉房子和一开始买房子剩的钱。

        [dd divorce:4];

        [dd introduce];

        

        [dd sellHouse:dd.ownhouse];

        [dd introduce];

        

        [dd getMarried:ss];

        [dd introduce];



最后的输出结果:

2014-09-18 09:07:54.807 aa[727:303] 经过7个月的努力奋斗, 穷屌丝终于攒够钱能买包租婆的房子了

2014-09-18 09:07:54.809 aa[727:303] 已买房子, 穷屌丝还剩47900RMB

2014-09-18 09:07:54.809 aa[727:303] 大家好, 我叫穷屌丝, 性别男, 今年31岁, 我有一套30.00平的房子, 地址是长江路88号, 至今未婚, 有意者请联系我,联系方式:110119

2014-09-18 09:07:54.810 aa[727:303] 穷屌丝终于和白富美结婚啦, 而且开始吃软饭了。

2014-09-18 09:07:54.810 aa[727:303] 大家好, 我叫穷屌丝, 性别男, 今年31岁, 我已经结婚了, 我的另一半叫白富美, 我们住在一套30.00平的房子里, 地址是长江路88

2014-09-18 09:07:54.810 aa[727:303] 4个月后,由于出现第三者穷屌丝竟然变心了并且和白富美离婚了。

2014-09-18 09:07:54.811 aa[727:303] 大家好, 我叫穷屌丝, 性别男, 今年31岁, 我有一套30.00平的房子, 地址是长江路88号, 至今未婚, 有意者请联系我,联系方式:110119

2014-09-18 09:07:54.811 aa[727:303] 已卖掉房子, 穷屌丝所剩钱数为351200RMB.

2014-09-18 09:07:54.812 aa[727:303] 大家好, 我叫穷屌丝, 性别男, 今年31岁, 至今未婚, 有意者请联系我,联系方式:110119

2014-09-18 09:07:54.847 aa[727:303] 穷屌丝终于和小三结婚啦, 而且开始吃软饭了。

2014-09-18 09:07:54.848 aa[727:303] 大家好, 我叫穷屌丝, 性别男, 今年31岁, 我已经结婚了, 我的另一半叫小三, 我们至今还没有自己的房子

Program ended with exit code: 0



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值