背景
本文记录学习ObjectC过程中的心得,参照网易云课堂视频,职坐标,记录视频的练习代码,并将要点进行总结。其实很多视频教程都不错,之前看的M了个J老师。本文包含创建一个Person类及Fraction类,实现分数的加减乘除.
第一个简单的Person类
Person.h
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
NSString *_name;
NSInteger _age;
}
-(
id)init;
-(
id)initWithName:(
NSString *)name AndAge:(
NSInteger) age;
-(
void)setName:(
NSString *)name;
-(
void)setAge:(
NSInteger) age;
-(
NSString *)name;
-(
NSInteger)age;
-(
void)print;
+(
void)test;
@end
Person.m
#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
#import <Foundation/Foundation.h>
@interface Fraction : NSObject
{
NSInteger _fenzi;
NSInteger _fenmu;
}
- (
id)initWithFenzi:(
NSInteger)fenzi andFenmu:(
NSInteger)fenmu;
- (
void)setFenzi:(
NSInteger)fenzi;
- (
void)setFenmu:(
NSInteger)fenmu;
-(
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
#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;
b = temp;
}
_fenzi /= a;
_fenmu /= a;
}
@end
main.m
#import <Foundation/Foundation.h>
#import "Person.h"
#import "Fraction.h"
int main(
int argc,
const char * argv[]) {
@autoreleasepool {
NSLog(@
"Hello, World!");
Fraction* frac1 = [[Fraction alloc]initWithFenzi:
2 andFenmu:
3];
Fraction* frac2 = [[Fraction alloc]initWithFenzi:
1 andFenmu:
4];
[frac1 print];
[frac1 mulFrac:frac2];
[frac1 reduce];
[frac1 print];
}
return 0;
}
本demo的github地址
转载请注明原文地址: https://ju.6miu.com/read-1304236.html