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

第二题  矩形计算

1、定义一个新的类XYPoint,成员变量:x、y。

方法:初始化方法、赋值方法(setter)、取值方法(getter)

2、定义一个新的类Rectangle,成员变量:width、height、XYPoint类型的point(原始点)、XYPoint类型的center(中心点)。

方法:赋值方法、取值方法、计算周长、计算面积

3、主函数实现周长、面积的计算,以及中心点的计算。


//  首先创建新的类XYPoint

//  XYPoint.h  文件

#import <Foundation/Foundation.h>

@interface XYPoint : NSObject
{
    int _x;
    int _y;
}
///初始化
- (id)initWithX:(int)x y:(int)y;
///赋值
- (void)setX:(int)x y:(int)y;
///取值
- (int)x;
- (int)y;

@end


//  方法实现

//  XYPoint.m  文件

#import "XYPoint.h"

@implementation XYPoint
///初始化
- (id)initWithX:(int)x y:(int)y
{
    _x = x;
    _y = y;
    return self;
}
///赋值
- (void)setX:(int)x y:(int)y
{
    _x = x;
    _y = y;
}
///取值
- (int)x
{
    return _x;
}
- (int)y
{
    return _y;
}


@end


//  创建复合类Rectangle(矩形)

#import <Foundation/Foundation.h>
#import "XYPoint.h"

@interface Rectangle : NSObject
{
    int _width;           // 宽
    int _height;          // 长
    XYPoint *_point;      // XYPoint型的原始点point
    XYPoint *_center;     // XYPoint型的中心点center
}
///赋值
- (void)setWidth:(int)width height:(int)height point:(XYPoint *)point;
///取值
- (int)width;
- (int)height;
- (XYPoint *)point;
- (XYPoint *)center;
///计算周长
- (int)perimeter;
///计算面积
- (int)area;
///计算中心点
- (int)centerX;
- (int)centerY;

@end


// 实现方法

// Rectangle.m  文件

#import "Rectangle.h"

@implementation Rectangle
///赋值
- (void)setWidth:(int)width height:(int)height point:(XYPoint *)point
{
    _width = width;
    _height = height;
    _point = point;
}
///取值
- (int)width
{
    return _width;
}
- (int)height
{
    return _height;
}
- (XYPoint *)point
{
    return _point;
}
- (XYPoint *)center
{
    return _center;
}
///计算周长
- (int)perimeter
{
    int m = (_width + _height) * 2;
    return m;
}
///计算面积
- (int)area
{
    int s = _width * _height;
    return s;
}
///中心点
- (int)centerX
{
    return ([_point x] + _width / 2);
}
- (int)centerY
{
    return ([_point y] + _height / 2);
}
@end


// 更改的Rectangle.m文件:

#import "Rectangle.h"
#import "XYPoint.h"

@implementation Rectangle
/// 初始化
- (id)initWithPoint:(XYPoint *)point
             height:(float)height
              width:(float)width
{
    _point = point;
    _height = height;
    _width = width;
    
    float x = [_point x] + width / 2.0;
    float y = [_point y] + height / 2.0;
    
    _center = [[XYPoint alloc] initWithX:x y:y];
    return self;
}
/// 打印
- (void)printInfo
{
    NSLog(@"原始点:(%.2f, %.2f) 中心点:(%.2f, %.2f) 宽(%.2f) 高(%.2f)",
          [_point x], [_point y], [_center x], [_center y], _width, _height);
}
@end

// 主函数main.m

#import <Foundation/Foundation.h>
#import "XYPoint.h"
#import "Rectangle.h"

int main(int argc, const char * argv[])
{
    @autoreleasepool {
        // 创建XYPoint类型的对象叫point(原始点),并初始化;
        XYPoint *point = [[XYPoint alloc] initWithX:10 y:20];
        // 创建Rectangle类型的对象叫rect;
        Rectangle *rect = [[Rectangle alloc] init];
        // 给rect对象赋值;
        [rect setWidth:60 height:100 point:point];
        // 创建XYPoint类型的对象叫center(中心点),并初始化,初始化的x坐标是通过给rect发送centerX消息,y坐标是通过给rect发送centerY消息;
        XYPoint *center = [[XYPoint alloc] initWithX:[rect centerX] y:[rect centerY]];
        // 打印周长,面积,中心点
        NSLog(@"周长:%d,面积:%d,中心点:(%d, %d)",
              [rect perimeter], [rect area], [center x], [center y]);
    }
    return 0;
}

// 更改后的主函数main.m

#import <Foundation/Foundation.h>
#import "XYPoint.h"
#import "Rectangle.h"

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        XYPoint *point1 = [[XYPoint alloc] initWithX:10 y:10];
        Rectangle *rect1 = [[Rectangle alloc] initWithPoint:point1 height:30 width:20];
        [rect1 printInfo];
    }
    return 0;
}

//  运行结果




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值