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

    xiaoxiao2025-11-16  3

    背景

    本文记录学习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

    知识点总结(一)

    在ObjectC里打印用NSLog,以@""表示,其中的@表示这是一个对象;OC里类的实例化,用Person *p = [[Person alloc]init]来表示,alloc是NSObject的方法,表示在堆内存 上申请一块内存放Person对象,然后要调用构造函数(通常以init开头),构造函数有且仅能调用一次。OC里的id类型类似C语言里的Void *,指向任意对象;变量存储在栈内存,但是alloc出来的对象存储在堆内存里;-号表示实例方法,也就归这个类的实例所有,+表示静态方法,归这个类所有,类似Java里的static关键字.NSLog打印时,打印字符串用%@作占位符,%li作打印int的占位符.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地址

    转载请注明原文地址: https://ju.6miu.com/read-1304236.html
    最新回复(0)