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