OC第二讲成员变量可见度与方法——复合

第三题  编写一个房屋类

要求:

由门和窗户组成。门和窗户有自己的开关方法,然后将门和窗这些复合在一起成为房屋类,调用房屋类的进出方法实际调用到门的开关;调用房屋换气方法,实际调用到窗户的开关;提供方法,实现更换门窗。


解题思路:

首先创建一个房屋类House,它的成员变量应该包括门类和窗户类,房屋类的方法有进出方法、更换门窗方法。
门类和窗户类的成员变量我定义一个int型的变量,用来保存门或窗户是否需要更换,1代表门或窗是完好的不需要更换,0代表门或窗已损坏需要更换。当调用房屋的进出方法时,需要先调用门的更换方法,在更换方法里检测门是否是坏的,如果是坏的,需要更换门,然后再调用门的开关方法显示“打开门”。同样原理再房屋类里调用换气方法时,先调用窗户类的更换方法,如果是好的直接调用窗户的打开方法。
下面是我的代码实现:

//  创建房屋类House
//  House.h
#import <Foundation/Foundation.h>
#import "Door.h"
#import "Window.h"

@interface House : NSObject
{
    Door *_door;        // 门类型的对象_door
    Window *_window;    // 窗户类型的对象_window
}
///初始化
- (id)initWithDoor:(Door *)door window:(Window *)window;
///进出方法
- (void)inOrOut;
///换气方法
- (void)changeAir;
@end

// 实现方法
// House.m
#import "House.h"

@implementation House
///初始化
- (id)initWithDoor:(Door *)door window:(Window *)window
{
    _door = door;
    _window = window;
    return self;
}
///进出方法
- (void)inOrOut
{
    [_door change];
}
///换气方法
- (void)changeAir
{
    [_window change];
}
@end

// 创建门类Door
// Door.h
#import <Foundation/Foundation.h>

@interface Door : NSObject
{
    int _wellOrBad;      // 定义变量保存门的好坏,1代表是好的,0代表是坏的
}
///初始化
- (id)initWithWellOrBad:(int)wellOrbad;
///赋值
- (void)setWellOrBad:(int)wellOrBad;
///取值
- (int)wellOrBad;
///开关方法
- (void)onOrOff;
///更换方法
- (void)change;
@end

// 实现方法
// Door.m
#import "Door.h"

@implementation Door
///初始化
- (id)initWithWellOrBad:(int)wellOrbad
{
    _wellOrBad = wellOrbad;
    return self;
}
///赋值
- (void)setWellOrBad:(int)wellOrBad
{
    _wellOrBad = wellOrBad;
}
///取值
- (int)wellOrBad
{
    return _wellOrBad;
}
///开关方法
- (void)onOrOff
{
    NSLog(@"Open door!");
}
///更换方法
- (void)change
{
    if (0 == _wellOrBad) {
        NSLog(@"Change door!");
    } else {
        [self onOrOff];
    }
}

@end

// 创建窗户类
// Window.h
#import <Foundation/Foundation.h>

@interface Window : NSObject
{
    int _wellOrBad;      // 定义变量保存窗户的好坏,1代表是好的,0代表是坏的
}
///初始化
- (id)initWithWellOrBad:(int)wellOrBad;
///赋值
- (void)setWellOrBad:(int)wellOrBad;
///取值
- (int)wellOrBad;
///开关方法
- (void)onOrOff;
///更换方法
- (void)change;

@end

// 实现方法
// Window.m
#import "Window.h"

@implementation Window
///初始化
- (id)initWithWellOrBad:(int)wellOrBad
{
    _wellOrBad = wellOrBad;
    return self;
}
///赋值
- (void)setWellOrBad:(int)wellOrBad
{
    _wellOrBad = wellOrBad;
}
///取值
- (int)wellOrBad
{
    return _wellOrBad;
}
///开关方法
- (void)onOrOff
{
    NSLog(@"Open windows!");
}
///更换方法
- (void)change
{
    if (0 == _wellOrBad) {
        NSLog(@"Change window!");
    } else {
        [self onOrOff];
    }
}
@end

// 主函数main.m
#import <Foundation/Foundation.h>
#import "House.h"
#import "Door.h"
#import "Window.h"

int main(int argc, const char * argv[])
{
    @autoreleasepool {
        // 创建Door类型的对象叫door,初始化值为1,代表door是好的;
        Door *door = [[Door alloc] initWithWellOrBad:1];
        // 创建Window类型的对象叫window,初始化为0,代表window是坏的;
        Window *window = [[Window alloc] initWithWellOrBad:0];
        // 创建复合类House初始化包括door和window
        House *house = [[House alloc] initWithDoor:door window:window];
        // 调用house对象的inOrout(进出方法);
        [house inOrOut];
        // 调用house对象的changeAir(换气方法);
        [house changeAir];
    }
    return 0;
}

个人答案,仅供参考


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值