OC-初始化方法-便利构造器(练习-约分)

原创 2015年07月08日 19:45:14

定义一个分数类(Fraction)

实例变量:分子, 分母

方法:初始化方法(2个参数), 便利构造器, 约分, 打印, 加, 减, 乘, 除.

提示:加法运算- (Fraction *)addFraction:(Fraction *)anotherFraction

main.m

<span style="font-size:18px;">//
//  main.m
//  分数
//
//  Created by dllo on 15/6/29.
//  Copyright (c) 2015年 dllo. All rights reserved.
//

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

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

#if 0
        Fraction *fraction = [Fraction fractionWithMember:15 denominator:60];//开辟内存初始化并赋值
        
        [fraction reduction];//约分
        [fraction print];//打印
        
        Fraction *fraction1 = [Fraction fractionWithMember:6 denominator:8];//另一个分数
        [fraction1 reduction];//约分
        [fraction1 print];//打印
#endif
#if 0
        [fraction addFraction:fraction1];//相加
        [fraction print];//打印
#endif
#if 0
        [fraction minusFraction:fraction1];//相减
        [fraction print];//打印
#endif
#if 0
        [fraction multiplyFraction:fraction1];//相乘
        [fraction print];//打印
#endif
#if 0
        [fraction divisionFraction:fraction1];//相除法
        [fraction print];//打印
#endif
        
    }
    return 0;
}
</span>


Fraction.h

<span style="font-size:18px;">//
//  Fraction.h
//  分数
//
//  Created by dllo on 15/6/29.
//  Copyright (c) 2015年 dllo. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface Fraction : NSObject
{
    NSUInteger _member;//分子
    NSUInteger _denominator;//分母
}

- (void)setMember:(NSUInteger)member;
- (NSUInteger)member;

- (void)setDenominator:(NSUInteger)denominator;
- (NSUInteger)denominator;

/* 初始化方法 */
- (instancetype)initMember:(NSUInteger)member
               denominator:(NSUInteger)denominator;

/* 便利构造器方法 */
+ (id)fractionWithMember:(NSUInteger)member
             denominator:(NSUInteger)denominator;

/* 约分 */
- (void)reduction;

/* 打印 */
- (void)print;

/* 加法 */
- (Fraction *)addFraction:(Fraction *)anotherFraction;

/* 减法 */
- (Fraction *)minusFraction:(Fraction *)anotherFraction;

/* 乘法 */
- (Fraction *)multiplyFraction:(Fraction *)anotherFraction;

/* 除法 */
- (Fraction *)divisionFraction:(Fraction *)anotherFraction;
@end
</span>


Fraction.m
//
//  Fraction.m
//  分数
//
//  Created by dllo on 15/6/29.
//  Copyright (c) 2015年 dllo. All rights reserved.
//

#import "Fraction.h"

@implementation Fraction
- (void)setMember:(NSUInteger)member
{
    _member = member;
}
- (NSUInteger)member
{
    return _member;
}

- (void)setDenominator:(NSUInteger)denominator
{
    _denominator = denominator;
}
- (NSUInteger)denominator
{
    return _denominator;
}

/* 初始化方法 */
- (instancetype)initMember:(NSUInteger)member
               denominator:(NSUInteger)denominator
{
    _member = member;
    _denominator = denominator;
    return self;
}

/* 便利构造器 */
+ (id)fractionWithMember:(NSUInteger)member
             denominator:(NSUInteger)denominator
{
    Fraction *fraction = [[Fraction alloc] initMember:member denominator:denominator];
    return fraction;
}

/* 约分 */
- (void)reduction
{
    NSInteger reduction = 0;/* 定义最大公约数 */
    NSInteger min = 0;
    min = _member < _denominator ? _member : _denominator;/* 求出分子分母中较小的数 */
    for (int i = 1; i <= min; i++) {
        if (_member % i == 0 && _denominator % i == 0)
        {
            reduction = i;/* 求出最大公约数 */
        }
    }
    _member /= reduction;/* 分子约分 */
    _denominator /= reduction;/* 分母约分 */
  
}

/* 打印 */
- (void)print
{
    NSLog(@"分数是:%ld/%ld", _member, _denominator);
 
    
}

/* 加法 */
- (Fraction *)addFraction:(Fraction *)anotherFraction
{
    /* 分子 = 第一个分数的分子*第二个分数的分母 + 第一个分数的分母 * 第二个分数的分子 */
    [self setMember: [self member] * [anotherFraction denominator] + [self denominator] * [anotherFraction member]];
    
    /* 分母 = 两个分数的分母之积 */
    [self setDenominator: [self denominator] * [anotherFraction denominator]];
    [self reduction];/* 最后约分 */
    return self;
}

/* 减法 */
- (Fraction *)minusFraction:(Fraction *)anotherFraction
{
    /* 分子 = 第一个分数的分子*第二个分数的分母 - 第一个分数的分母 * 第二个分数的分子 */
    [self setMember: [self member] * [anotherFraction denominator] - [self denominator] * [anotherFraction member]];
    
    /* 分母 = 两个分数的分母之积 */
    [self setDenominator: [self denominator] * [anotherFraction denominator]];
    [self reduction];/* 最后约分 */
    return self;
}

/* 乘法 */
- (Fraction *)multiplyFraction:(Fraction *)anotherFraction
{
    /* 分子 = 两个分数分子之积 */
    [self setMember: [self member] * [anotherFraction member]];

    /* 分子 = 两个分数分母之积 */
    [self setDenominator: [self denominator] * [anotherFraction denominator]];
    [self reduction];/* 最后约分 */
    return self;
}

/* 除法 */
- (Fraction *)divisionFraction:(Fraction *)anotherFraction
{
    /* 分子 = 第一个分数的分子*第二个分数的分母 */
    [self setMember: [self member] * [anotherFraction denominator] ];
    
    /*  第一个分数的分母 * 第二个分数的分子 */
    [self setDenominator: [self denominator] * [anotherFraction member]];
    [self reduction];/* 最后约分 */
    return self;
}
@end
























版权声明:本文为博主原创文章,未经博主允许不得转载。

OC-继承、初始化方法、便利构造器概念

继承的上层:父类  继承的下层:子类 继承是单向的,不能相互继承 继承具有传递性...
  • han919_
  • han919_
  • 2015年11月13日 08:53
  • 341

OC-继承-初始化方法-便利构造器(练习题-打僵尸)

需求: 1、定义普通僵尸类:   实例变量:僵尸总血量、僵尸每次失血量。   方法:初始化方法、便利构造器、被打击失血、死亡。 2、定义路障僵尸类:   实例变量:僵尸总血量、僵尸每次失血量,道具,弱...
  • yuling962464
  • yuling962464
  • 2015年07月08日 17:35
  • 345

iOS开发之OC继承、初始化方法、便利构造器

一、继承 继承的上层:父类,继承的下层:子类。 继承是单向的,不能相互继承。 继承具有传递性:A继承于B,B继承于C,A具有B和C的特征和行 为。 子类能继承父类全部的特征和行为。 ...
  • lolevergreen
  • lolevergreen
  • 2015年08月12日 13:23
  • 1594

oc初始化方法,便利构造器

不多说 先上代码: 一。初始化方法 在Teacher.h 文件中先定义 -(id)init; -(id)init:(NSString *)name; 然后在Teacher.m文件...
  • u012248269
  • u012248269
  • 2015年04月14日 21:21
  • 809

继承、初始化方法、便利构造器

…………………………………………………………………………………………………………………………………………………………….   //继承:子类会继承父类所有实例变量以及方法  //self:  谁...
  • Yz_OS
  • Yz_OS
  • 2015年11月25日 22:44
  • 107

OCday3 初始化方法, 便利构造器, 继承

//************************************ // Person.h 文件 #import @interface Person : NSObject //...
  • chaohui1345
  • chaohui1345
  • 2015年05月08日 19:59
  • 174

Objective-C_继承、初始化方法、便利构造器

通过“打僵尸”示例,讲解Objective-C的继承、初始化方法和便利构造器
  • u013485543
  • u013485543
  • 2015年08月02日 15:38
  • 798

03 继承 初始化方法 便利构造器

一 继承 二 初始化方法 三 便利构造器
  • baidu_23219451
  • baidu_23219451
  • 2014年11月23日 19:08
  • 218

初学者初始化方法 便利构造器

#pragma mark 初始化方法(在这里,我是初始化方法,通常情况下,把参数最全的初始化方法作为指定初始化方法) -(id)initWithName:(NSString *)name withA...
  • SoundsGood
  • SoundsGood
  • 2015年09月09日 15:28
  • 152

OC_继承,便利构造器,初始化方法

//  main.m //  OC3_继承,便利构造器,初始化方法 // //  Created by dllo on 15/7/16. //  Copyright (c) 2...
  • MLtianya
  • MLtianya
  • 2015年07月17日 19:10
  • 522
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OC-初始化方法-便利构造器(练习-约分)
举报原因:
原因补充:

(最多只允许输入30个字)