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

main.m

<span style="font-size:18px;">//
//  main.m
//  分数
//
//  Created by dllo on 15/6/29.
//

#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 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.
//

#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 *)minusFraction:(Fraction *)anotherFraction;

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

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

Fraction.m
//
//  Fraction.m
//  分数
//
//  Created by dllo on 15/6/29.
//

#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);

}

/* 加法 */
{
/* 分子 = 第一个分数的分子*第二个分数的分母 + 第一个分数的分母 * 第二个分数的分子 */
[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_
• 2015年11月13日 08:53
• 341

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

• yuling962464
• 2015年07月08日 17:35
• 345

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

• lolevergreen
• 2015年08月12日 13:23
• 1594

## oc初始化方法，便利构造器

• u012248269
• 2015年04月14日 21:21
• 809

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

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

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

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

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

• u013485543
• 2015年08月02日 15:38
• 798

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

• baidu_23219451
• 2014年11月23日 19:08
• 218

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

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

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

//  main.m //  OC3_继承,便利构造器,初始化方法 // //  Created by dllo on 15/7/16. //  Copyright (c) 2...
• MLtianya
• 2015年07月17日 19:10
• 522

举报原因： 您举报文章：OC-初始化方法-便利构造器(练习-约分) 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)