第三题 编写一个房屋类
要求:
由门和窗户组成。门和窗户有自己的开关方法,然后将门和窗这些复合在一起成为房屋类,调用房屋类的进出方法实际调用到门的开关;调用房屋换气方法,实际调用到窗户的开关;提供方法,实现更换门窗。
解题思路:
首先创建一个房屋类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 charchar * 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;
- }