ObjectC快速入门教程(1)--创建类

背景

本文记录学习ObjectC过程中的心得,参照网易云课堂视频,职坐标,记录视频的练习代码,并将要点进行总结。其实很多视频教程都不错,之前看的M了个J老师。本文包含创建一个Person类及Fraction类,实现分数的加减乘除.

第一个简单的Person类

Person.h

//
//  Person.h
//  ObjectC Class学习
//
//  Created by yanzi on 16/8/14.
//  Copyright © 2016年 yanzi. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface Person : NSObject
{
    NSString *_name;
    NSInteger _age;
}
-(id)init;
-(id)initWithName:(NSString *)name AndAge:(NSInteger) age;

//setter方法
-(void)setName:(NSString *)name;
-(void)setAge:(NSInteger) age;

//getter方法
-(NSString *)name;
-(NSInteger)age;

-(void)print;

+(void)test;



@end

Person.m

//
//  Person.m
//  ObjectC Class学习
//
//  Created by yanzi on 16/8/14.
//  Copyright © 2016年 yanzi. All rights reserved.
//

#import "Person.h"

@implementation Person

-(id)init{
    self = [super init];
    if(self){
        _name = @"李小龙";
        _age = 29;
    }
    return self;
}

-(id)initWithName:(NSString *)name AndAge:(NSInteger)age{
    self = [self init];
    self->_age = age;
    self->_name = name;
    return self;
}


-(void)setName:(NSString *)name{
    _name = name;
}
-(void)setAge:(NSInteger) age{
    _age = age;
}

-(NSString *)name{
    return _name;
}

-(NSInteger)age{
    return _age;
}

- (void)print{
    NSLog(@"name = %@, age = %li", _name, _age);
}

+(void)test{
    Person *person = [[Person alloc]initWithName:@"大爷的" AndAge:100];
    [person print];

}

@end

知识点总结(一)

  1. 在ObjectC里打印用NSLog,以@""表示,其中的@表示这是一个对象;
  2. OC里类的实例化,用Person *p = [[Person alloc]init]来表示,alloc是NSObject的方法,表示在堆内存 上申请一块内存放Person对象,然后要调用构造函数(通常以init开头),构造函数有且仅能调用一次。
  3. OC里的id类型类似C语言里的Void *,指向任意对象;
  4. 变量存储在栈内存,但是alloc出来的对象存储在堆内存里;
  5. -号表示实例方法,也就归这个类的实例所有,+表示静态方法,归这个类所有,类似Java里的static关键字.
  6. NSLog打印时,打印字符串用%@作占位符,%li作打印int的占位符.
  7. OC里函数名字后面是用冒号来分割参数的,Java/c++都是用括号,这个一不小心真是不大适应;

下面是分数器的例子,实现分数的加/减/乘/除/约分

Fraction.h

//
//  Fraction.h
//  ObjectC Class学习
//
//  Created by yanzi on 16/8/14.
//  Copyright © 2016年 yanzi. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface Fraction : NSObject
{
    NSInteger _fenzi; //分子
    NSInteger _fenmu; //分母

}
- (id)initWithFenzi:(NSInteger)fenzi andFenmu:(NSInteger)fenmu;

//setter
- (void)setFenzi:(NSInteger)fenzi;
- (void)setFenmu:(NSInteger)fenmu;

//getter
-(NSInteger)fenzi;
-(NSInteger)fenmu;

- (void)print;

-(void)addFrac:(Fraction*)frac; //加
-(void)subFrac:(Fraction*)frac; //减
-(void)mulFrac:(Fraction*)frac; //乘
-(void)divFrac:(Fraction*)frac; //除

-(void)reduce; //约分



@end

Fraction.m

//
//  Fraction.m
//  ObjectC Class学习
//
//  Created by yanzi on 16/8/14.
//  Copyright © 2016年 yanzi. All rights reserved.
//

#import "Fraction.h"

@implementation Fraction

- (id)initWithFenzi:(NSInteger)fenzi andFenmu:(NSInteger)fenmu{
    self = [super init];
    if(self){
        _fenmu = fenmu;
        _fenzi = fenzi;
    }
    return self;
}

- (void)setFenmu:(NSInteger)fenmu{
    _fenmu = fenmu;
}

- (void)setFenzi:(NSInteger)fenzi{
    _fenzi = fenzi;
}

- (NSInteger)fenzi{
    return _fenzi;
}

- (NSInteger)fenmu{
    return _fenmu;
}

- (void)print{
    NSLog(@"%li / %li", _fenzi, _fenmu);
}

- (void)addFrac:(Fraction *)frac{
    _fenzi = _fenzi * [frac fenmu] + _fenmu * [frac fenzi];
    _fenmu = _fenmu * [frac fenmu];
}

- (void)subFrac:(Fraction *)frac{
    _fenzi = _fenzi*[frac fenmu] - _fenmu * [frac fenzi];
    _fenmu = _fenmu * [frac fenmu];

}

- (void)mulFrac:(Fraction *)frac{
    _fenzi *= [frac fenzi];
    _fenmu *= [frac fenmu];
}

- (void)divFrac:(Fraction *)frac{
    _fenzi *= [frac fenmu];
    _fenmu *= [frac fenzi];
}

- (void)reduce{
    NSInteger a = _fenzi;
    NSInteger b = _fenmu;
    while(b){
        NSInteger temp = a % b; //辗转相除法求余数, 如果a % b求余不为0,则a和b的最大公约数,等于b对temp的最大公约数
        a = b;
        b = temp;
    }
    //出上面while循环后a就是最大公约数
    _fenzi /= a;
    _fenmu /= a;

}


@end

main.m

//
//  main.m
//  ObjectC Class学习
//
//  Created by yanzi on 16/8/14.
//  Copyright © 2016年 yanzi. All rights reserved.
//

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

int main(int argc, const char * argv[]) {
@autoreleasepool {
    // insert code here...
    NSLog(@"Hello, World!");
//        Person *p = [[Person alloc]initWithName:@"yanzi" AndAge:12];
//        [p print];
//        [Person test];

    Fraction* frac1 = [[Fraction alloc]initWithFenzi:2 andFenmu:3];
    Fraction* frac2 = [[Fraction alloc]initWithFenzi:1 andFenmu:4];
    [frac1 print];
//    [frac1 addFrac:frac2]; // 加法测试
//    [frac1 subFrac:frac2];//减法测试
//    [frac1 mulFrac:frac2];//乘法测试
//    [frac1 divFrac:frac2];  //除法测试
    [frac1 mulFrac:frac2];  //约分测试
    [frac1 reduce];
    [frac1 print];
}
return 0;
}

本demo的github地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值