类是一组具有相同特征和行为的事物的抽象,类就是通常所说的"类型".对象就是类的实例.
在OC中,类的定义分两个部分:接口部分和实现部分, 通常分别写在两个文件中.
接口部分: .h; 声明了类名、父类名、实例变量(特征)和方法(行为);实现部分: .m; 方法的具体实现(具体行为);接口部分以@interface开始,以@end结束:
@interface 类名:NSObject{ //实例变量列表(类的特征) }
//方法列表(类的行为列表)@end.h可以在一个文件里,声明多个类,但通常不这么做;实现部分以@implementation开始,以@end结束:@implementation 类名{ //方法列表}@end创建对象,分两步:内存分配:为对象分配内存空间,并返回首地址;初始化:在内存中填上初始值;
OO(Object Oriented)面向对象OOP(Object Oriented Programming)面向对象编程
//记录
.h
#import <Foundation/Foundation.h>
@interface Student : NSObject
//1.接口部分(所属的文件以.h结尾){ //实例变量的列表(类的特征列表) @public NSString * _name; /*NSString * 在OC里定义字符串*/ NSString * _sex; int _age; //实例变量的使用: //1.类的内部 //在类的内部,实例变量在任何方法中都可以随意使用 //2.外部访问实例变量时,有可见度的设置 //三种访问权限(可见度) //@public 公开的 表示实例变量可以 在外部 随意调用和改动 //@protected 受保护的 表示实例变量不可以在外部被调用和修改(OC默认) //@private 私有的,不可以在外部被调用和修改}//方法列表(也叫类的行为列表;类的方法在接口部分,只是声明,不实现)- (void) study; - (void) sleep;
//带参数的方法- (void)eat:(NSString *)food;//多参数- (void)firstNumber : (int)num1 secondNumber : (int)num2 thirdNumber : (int)num3;
@end.m
#import "Student.h"
@implementation Student
//实现部分:(.m文件)//接口部分中的 所有方法 都必须在实现部分实现- (void) study { _name = @"啊啊啊"; _age = 10; _sex = @"男"; NSLog(@"我正在学习,名字:%@ 年龄:%d 性别:%@",_name,_age,_sex);
/*NSlog相当于printf打印*/}- (void) sleep { _name = @"噢噢噢"; _sex = @"你猜"; NSLog(@"正在睡觉,%@%@",_name,_sex);}
//带参数的方法
- (void)eat:(NSString *)food{ NSLog(@"%@在吃%@",_name,food);}
//多参数
-(void)firstNumber:(int)num1 secondNumber:(int)num2 thirdNumber:(int)num3{ NSLog(@"%d=%d=%d",num1,num2,num3);}
@end
main.m
#import <Foundation/Foundation.h>
//第一步,引入类的头文件
#import "Student.h"
int main(int argc, const char * argv[]){
Student * stu1 = [[Student alloc] init]; /*创建实例对象*/
//利用 stu1对象 调用自身的方法 [stu1 study]; //对象 学习 [stu1 sleep]; //对象 睡觉
//实例变量被改变为public后,调用对象的实例变量 stu1->_name = @"啊啊君"; /*给stu1 赋值*/ NSLog(@"%@",stu1->_name);
[stu1 eat:@"hjhj"]; //带参数
[stu1 firstNumber : 213 secondNumber : 123 thirdNumber : 789]; //多参数
//作业
1.完成班级开班介绍需求: (1)定义一个班级类。实例变量:所属培训机构,班级名,班级人数、开班时间、授课老师名字。方法:初始化、集体活动、开班会。 (2)定义一个老师类。实例变量:名字、性别、年龄、正在教的课程、授课班级。方法:初始化、讲课、留作业、验收作业、解决问题、自我介绍。 (3)定义一个学生类。实例变量:名字、性别、年龄、学号、所在班级、任课老师、正在学习的课程。方法:初始化、学习、做作业、提出问题、回答问题、自我介绍。
(1)
.h
{ NSString * _trainingAgency;//培训机构 NSString * _className; //班级名 int _classSize; //班级人数 NSString * _classTime; //开班时间 NSString * _teacherName; //老师名字}- (void) initialize;- (void) collectiveActivity;- (void) classMeeting;.m
- (void) initialize //初始化{ _trainingAgency = @"啊啊"; _className = @"哦哦"; _classSize = 20; _classTime = @"呵呵"; _teacherName = @"噢噢"; NSLog(@"%@学院%@班,有%d人,开班时间%@,班主任是%@\n",_trainingAgency,_className,_classSize,_classTime,_teacherName);}- (void) collectiveActivity //集体活动{ NSLog(@"参加集体活动");}- (void) classMeeting //开班会{ NSLog(@"集体参加班会活动");}
(2)
.h
@interface Teacher : NSObject{ @public NSString * _name; NSString * _sex; int age; NSString * _course; //课程 NSString * _lectureclass; //授课班级}- (void) initialize;- (void) teach;- (void) homework;- (void) acceptanceOfTheWork; //验收作业- (void) toSolveTheProblem; //解决问题- (void) toIntroduceMyself; //自我介绍
.m
- (void) initialize{ _name = @"12君"; _sex = @"23"; age = 0; _course = @"Object-c"; _lectureclass = @"34"; NSLog(@"老师:%@,性别%@,年龄为%d,会%@,班级是%@",_name,_sex,age,_course,_lectureclass);}- (void) teach{ NSLog(@"你猜");}- (void) homework{ NSLog(@"你猜");}- (void) acceptanceOfTheWork //验收作业{ NSLog(@"你猜");}- (void) toSolveTheProblem //解决问题{ NSLog(@"你猜");}- (void) toIntroduceMyself{ NSLog(@"你猜");}
(3)
.h
@interface Student : NSObject{ @public NSString * _name; NSString * _sex; int _age; int _studentId; NSString * _class; NSString * _teacher; NSString * _courses; //课程}- (void) initialize;- (void) learning;- (void) doingHomework;- (void) askQuestions;- (void) answerQuestions;- (void) introduceMyself;
.m
@implementation Student- (void) initialize{ _name = @"78"; _sex = @"89"; _age = 100; _studentId = 0; _class = @"90"; _teacher = @"67"; _courses = @"56"; NSLog(@"1:%@,性别:%@,年龄:%d,学号:%d,班级:%@,老师:%@,课程:%@\n",_name,_sex,_age,_studentId,_class,_teacher,_courses);}- (void) learning{ NSLog(@"你猜");}- (void) doingHomework{ NSLog(@"你猜");}- (void) askQuestions{ NSLog(@"你猜");}- (void) answerQuestions{ NSLog(@"你猜");}- (void) introduceMyself{ NSLog(@"你猜");}
main.m
#import "IOS8班级.h"#import "Teacher.h"#import "Student.h"
int main(int argc, const char * argv[]){ IOS8__ * stu1 = [[IOS8__ alloc] init]; [stu1 initialize]; Teacher * sta1 = [[Teacher alloc] init]; [sta1 initialize]; Student * stb1 = [[Student alloc] init]; [stb1 initialize];
2.编程实现:在一个视图坐标系中(原点在左上角,原点向右为正x,原点向下为正y,坐标系宽320,高480),创建布置3个矩形对象。第二个和第三个矩形拼接显示的位置,刚好能够完全覆盖第一个矩形。输出这三个矩形的坐标x,坐标y,宽,高,周长,面积。矩形对象不要超出坐标系的范围。需求:定义矩形类:实例变量:坐标x、坐标y、宽、高、矩形中心点的坐标centerX、矩形中心点的坐标centerY、面积、周长。方法:初始化、绘制(输出4个主要数据,面积、周长),计算周长、计算面积。
3.分数计算:任意的两个分数,对这两个分数的进行加、减、乘、除运算,并输出结果, 注:结果区分正负。需求:任意的两个分数,对这两个分数的进行加、减、乘、除运算,并输出结果,注:结果区分正负。
.h
@property (nonatomic,assign)int numerator; //分子@property (nonatomic,assign)int denomiantor; //分母- (id)initWithNumeratot:(int)num denomiantor:(int)denom;- (Fraction *)addFraction:(Fraction *)fraction; //分数 + 分数 返回 分数 add:+- (Fraction *)subFraction:(Fraction *)fraction; //分数 - 分数 subtract:-- (Fraction *)mulFraction:(Fraction *)fraction; //分数 * 分数 multiplication:*- (Fraction *)divFraction:(Fraction *)fraction; //分数 / 分数 division: /
.m
- (id)initWithNumeratot:(int)num denomiantor:(int)denom{ self = [super init]; if (self) { _numerator = num; _denomiantor = denom; } return self;}- (Fraction *)addFraction:(Fraction *)fraction{ int newNum = _numerator*fraction.denomiantor+_denomiantor*fraction.numerator; //新的分子=第一个数的分子*第二个数的分母+第二个数的分母*第一个数的分子得到 int newDenom = self.denomiantor*fraction.denomiantor; //新的分母=(self.:调用自己的)自己的分母*第二个数的分母 Fraction * f = [[Fraction alloc]initWithNumeratot:newNum denomiantor:newDenom]; return f;}- (Fraction *)subFraction:(Fraction *)fraction{ int newNum = _numerator*fraction.denomiantor-_denomiantor*fraction.numerator; int newDenom = self.denomiantor*fraction.denomiantor; Fraction * r = [[Fraction alloc]initWithNumeratot:newNum denomiantor:newDenom]; return r;}- (Fraction *)mulFraction:(Fraction *)fraction{ int newNum = _numerator * fraction.numerator; int newDenom = self.denomiantor*fraction.denomiantor; Fraction * a = [[Fraction alloc]initWithNumeratot:newNum denomiantor:newDenom]; return a;}- (Fraction *)divFraction:(Fraction *)fraction{ int newNum = self.numerator*fraction.denomiantor; int newDenom = self.denomiantor*fraction.numerator; Fraction * c = [[Fraction alloc]initWithNumeratot:newNum denomiantor:newDenom]; return c;}main.m
Fraction * f1 = [[Fraction alloc] initWithNumeratot:1 denomiantor:2]; Fraction * f2 = [[Fraction alloc] initWithNumeratot:2 denomiantor:3]; Fraction * f3 = [f1 addFraction:f2]; //第一个对象 + 第二个对象 返回一个对象 NSLog(@"%d/%d",[f3 numerator],[f3 denomiantor]); Fraction * f4 = [f1 subFraction:f2]; NSLog(@"%d/%d",[f4 numerator],[f4 denomiantor]); Fraction * f5 = [f1 mulFraction:f2]; NSLog(@"%d/%d",[f5 numerator],[f5 denomiantor]); Fraction * f6 = [f1 divFraction:f2]; NSLog(@"%d/%d",[f6 numerator],[f6 denomiantor]);