第一天
1-15
类名:苹果手机(iPhone)
属性:颜色(_color ), 大小(_size), _cpu
行为:查看本机信息(aboutMyPhone),打电话(call), 发短信(sendMessage)
实现该类,并:
1)查看本机信息 2)打电话给10086 3)给10086发短信问联通的客服电话是多少
#import <Foundation/Foundation.h>
//iPhone 类的声明
typedef enum color{kColorWhite,kColorBlack,kColorTHJ} iColor;
@interface iPhone:NSObject
{
//类的属性(实例变量、成员变量)
@public //手机的颜色 iColor _color; //手机的尺寸 float _size; //手机的CPU NSString *_cpu; } //类的行为(方法)的声明 //查看手机的信息 实质:把手机的实例变量值打印出来 -(void)aboutMyPhone; //打电话,需要一个参数,参数就是电话号码(字符串) -(void)callPhone:(NSString *) telNum; //发短信,给指定号码 发送 短信,短信的内容可以指定 -(void)sendMessage:(NSString *)telNum andContent:(NSString *) content; -(void)sendMessage:(NSString *)telNum :(NSString *) content :(int) age; //在这个代码中没有用到这个方法,但给自己一个思考,二个以上的参数怎么定义 // @end //iPhone 类的实现 @implementation iPhone //类的行为(方法)的声明 //查看手机的信息 实质:把手机的实例变量值打印出来 -(void)aboutMyPhone{ NSLog(@"颜色:%d,尺寸:%.2f,cpu:%@",_color,_size,_cpu); } //打电话,需要一个参数,参数就是电话号码(字符串) -(void)callPhone:(NSString *) telNum{ NSLog(@"给 %@ 打电话!",telNum); } //发短信,给指定号码 发送 短信,短信的内容可以指定 -(void)sendMessage:(NSString *)telNum andContent:(NSString *) content{ NSLog(@"给 %@ 发送短信,短信内容:%@ .",telNum,content); } @end int main(int argc, const char * argv[]) { @autoreleasepool { //创建对象 iPhone *iphone7Plus = [iPhone new]; //设定手机的信息 iphone7Plus->_color = kColorTHJ; iphone7Plus->_cpu = @"A20"; iphone7Plus->_size = 7.9f; //调用方法 [iphone7Plus aboutMyPhone]; //给10086打电话 [iphone7Plus callPhone:@"10086"]; //给10086发短信, [iphone7Plus sendMessage:@"10086" andContent:@"您好,请问联通的客服电话号码是多少?"]; } return 0; }
2015-07-16 10:46:44.531 15-苹果手机(Iphone)类[629:23162] 颜色:2,尺寸:7.90,cpu:A20
2015-07-16 10:46:44.532 15-苹果手机(Iphone)类[629:23162] 给 10086 打电话!
2015-07-16 10:46:44.532 15-苹果手机(Iphone)类[629:23162] 给 10086 发送短信,短信内容:您好,请问联通的客服电话号码是多少? .
掌握】08-练习题讲解
设计一个”狗“类
1> 属性 * 颜色 * 速度(单位是m/s) * 性别 * 体重(单位是kg) 2> 行为 * 吃:每吃一次,体重增加0.5kg,输出吃完后的体重 * 吠(叫):输出所有的属性 * 跑:每吃一次,体重减少0.5kg,输出速度和跑完后的体重 * 比较颜色:跟别的狗比较颜色,如果一样,两个值做减法得零,返回NO(零值),不一样,做减法得到非零值,返回YES(1) * 比较速度:跟别的狗比较速度,返回速度差(自己的速度 - 其他狗的速度)
#import <Foundation/Foundation.h>
//定义狗的颜色的枚举
typedef enum {kColorWhite,kColorYellow,kColorHua,kColorBlack} Color;
typedef enum {kSexGong,kSexMu,kSexYao} Sex; #pragma mark 狗类的定义 @interface Dog:NSObject { @public //狗的实例变量 Color _color; //NSString *_color; //char * //strcmp(字符串) //狗的体重 float _weight; //狗的性别 Sex _sex; //狗的速度 int _speed; } //狗的行为 -(void)eat:(NSString *)foodName;//体重+0.5 -(void)run; //体重-0.5 -(void)bark; //打印所有的信息 //比较狗毛的颜色 -(BOOL)isCompareColorWithOther:(Dog *)dog; //比较速度 -(int)CompareSpeedWithOther:(Dog *)dog; @end #pragma mark 狗类的实现 @implementation Dog -(void)eat:(NSString *)foodName{ _weight += 0.5f; NSLog(@"狗正在吃%@,吃完后还打了个隔!",foodName); }//体重+0.5 -(void)run{ _weight -= 0.5f; NSLog(@"狗正在以时速 %d 的速度向前疯跑!",_speed); } //体重-0.5 -(void)bark{ NSLog(@"性别:%d,颜色:%d,速度:%d,当前体重:%.2f",_sex,_color,_speed,_weight); } //打印所有的信息 //比较狗毛的颜色 -(BOOL)isCompareColorWithOther:(Dog *)dog{ //当前狗的颜色 另外一条狗的颜色 if(_color == dog->_color){ return YES; //颜色相同 }else{ return NO; } } //比较速度 -(int)CompareSpeedWithOther:(Dog *)dog{ return _speed - dog->_speed; } @end int main(int argc, const char * argv[]) { @autoreleasepool { //创建两条狗 Dog *d1 = [Dog new]; d1->_speed = 80; d1->_weight=20; d1->_sex = kSexYao; d1->_color = kColorHua; // [d1 bark]; [d1 eat:@"一块沾有粑粑的玉米"]; [d1 eat:@"一块沾有粑粑的红薯"]; [d1 bark]; //创建两条狗 Dog *d2 = [Dog new]; d2->_speed = 30; d2->_weight= 50; d2->_sex = kSexGong; d2->_color = kColorHua; // [d2 bark]; [d2 eat:@"一块沾有粑粑的玉米"]; [d2 eat:@"一块沾有粑粑的红薯"]; [d2 bark]; // 1 相同 0不同 BOOL isSameColor = [d1 isCompareColorWithOther:d2]; NSLog(@"isSameColor = %d",isSameColor); //比较狗的速度差 int cha = [d1 CompareSpeedWithOther:d2]; NSLog(@"速度差:%d",cha); } return 0; }
2015-07-16 16:15:00.586 08-练习题讲解(一)-1[972:83417] 性别:2,颜色:2,速度:80,当前体重:20.00 2015-07-16 16:15:00.587 08-练习题讲解(一)-1[972:83417] 狗正在吃一块沾有粑粑的玉米,吃完后还打了个隔! 2015-07-16 16:15:00.587 08-练习题讲解(一)-1[972:83417] 狗正在吃一块沾有粑粑的红薯,吃完后还打了个隔! 2015-07-16 16:15:00.587 08-练习题讲解(一)-1[972:83417] 性别:2,颜色:2,速度:80,当前体重:21.00 2015-07-16 16:15:00.587 08-练习题讲解(一)-1[972:83417] 性别:0,颜色:2,速度:30,当前体重:50.00 2015-07-16 16:15:00.588 08-练习题讲解(一)-1[972:83417] 狗正在吃一块沾有粑粑的玉米,吃完后还打了个隔! 2015-07-16 16:15:00.588 08-练习题讲解(一)-1[972:83417] 狗正在吃一块沾有粑粑的红薯,吃完后还打了个隔! 2015-07-16 16:15:00.588 08-练习题讲解(一)-1[972:83417] 性别:0,颜色:2,速度:30,当前体重:51.00 2015-07-16 16:15:00.588 08-练习题讲解(一)-1[972:83417] isSameColor = 1 2015-07-16 16:15:00.588 08-练习题讲解(一)-1[972:83417] 速度差:50
反思: 1.代码书写顺序 先把固定格式写好(类定义,声明) 2.枚举不熟悉
(二)
2.结合前面的“狗”类,设计一个“人”类
1> 属性 * 姓名 * 狗(养了一条狗) 2> 行为 * 喂狗:每喂一次,狗就会执行“吃”这个行为 * 遛狗:每溜一次,狗就会执行“跑”这个行为
#import <Foundation/Foundation.h>
//定义狗的颜色的枚举
typedef enum {kColorWhite,kColorYellow,kColorHua,kColorBlack} Color;
typedef enum {kSexGong,kSexMu,kSexYao} Sex; #pragma mark 狗类的定义 @interface Dog:NSObject { @public //狗的实例变量 Color _color; //NSString *_color; //char * //strcmp(字符串) //狗的体重 float _weight; //狗的性别 Sex _sex; //狗的速度 int _speed; } //狗的行为 -(void)eat:(NSString *)foodName;//体重+0.5 -(void)run; //体重-0.5 -(void)bark; //打印所有的信息 //比较狗毛的颜色 -(BOOL)isCompareColorWithOther:(Dog *)dog; //比较速度 -(int)CompareSpeedWithOther:(Dog *)dog; @end #pragma mark - #pragma mark 人这个类的定义部分 @interface Person : NSObject { @public NSString *_name; Dog *_dog; } //行为 //喂狗 -(void)feedDog:(NSString *)foodName; //遛狗 -(void)liuDog; @end #pragma mark - #pragma mark 人这个类的实现部分 @implementation Person //喂狗 -(void)feedDog:(NSString *)foodName{ //_dog //让狗吃东西 //[null eat:foodName]; [_dog eat:foodName]; } //遛狗 -(void)liuDog{ //让狗跑起来 [_dog run]; } @end #pragma mark 狗类的实现 @implementation Dog -(void)eat:(NSString *)foodName{ _weight += 0.5f; NSLog(@"狗正在吃%@,吃完后还打了个隔!",foodName); }//体重+0.5 -(void)run{ _weight -= 0.5f; NSLog(@"狗正在以时速 %d 的速度向前疯跑!",_speed); } //体重-0.5 -(void)bark{ NSLog(@"性别:%d,颜色:%d,速度:%d,当前体重:%.2f",_sex,_color,_speed,_weight); } //打印所有的信息 //比较狗毛的颜色 -(BOOL)isCompareColorWithOther:(Dog *)dog{ //当前狗的颜色 另外一条狗的颜色 if(_color == dog->_color){ return YES; //颜色相同 }else{ return NO; } } //比较速度 -(int)CompareSpeedWithOther:(Dog *)dog{ return _speed - dog->_speed; } @end int main(int argc, const char * argv[]) { @autoreleasepool { //创建两条狗 Dog *d1 = [Dog new]; d1->_speed = 80; d1->_weight=20; d1->_sex = kSexYao; d1->_color = kColorHua; //创建一个人的对象 Person *p = [Person new]; // p->_name //给p一个dog p->_dog = d1; NSLog(@"%@",p->_dog); //人要喂狗 [p feedDog:@"骨头"]; //狗会吃东西吗?为什么? } return 0; }
2015-07-16 17:21:35.714 09-练习题讲解(一)-2[1029:99437] <Dog: 0x10020a1f0> 2015-07-16 17:21:35.715 09-练习题讲解(一)-2[1029:99437] 狗正在吃骨头,吃完后还打了个隔!
反思: 这个练习想让我们学习的是实例变量可以是一个类类型
但这个类类型默认是null,你必须先赋值
13-【理解】练习题讲解(二)-1
思考&实现1: 设计一个”学生“类
1> 属性 * 姓名 * 生日 用结构体作为类的实例变量(生日)
/*
设计一个”学生“类
1> 属性
* 姓名
* 生日
*/
#import <Foundation/Foundation.h>
//Student
//iPhone --> IPhone
//日期的结构体
typedef struct {
//年
int year; //月 int month; //日 int day; }MyDate; //Student类的声明 @interface Student : NSObject { @public //学生姓名 NSString *_name; //学生生日 MyDate _birthday; //结构体变量 //MyDate1 *md = [MyDate new]; // // MyDate1 *_birthday; } @end //Student类的实现 @implementation Student @end int main(int argc, const char * argv[]) { @autoreleasepool { Student *stu = [Student new]; stu->_name = @"凤姐"; // // struct Car{ // // int lunzi; // int speed; // // }car1;
// (struct Car) // car1 = {4,50}; // int a[3]={4,50}; //第一种方法 stu->_birthday =(MyDate){1983,12,12}; //NSLog(@"%d,%d,%d",stu->_birthday.year,stu->_birthday.month,stu->_birthday.day); //第二种方法:定义一个结构体变量 MyDate d1 = {1981,11,11}; //定义结构体变量的同时进行初始化 stu->_birthday = d1; // NSLog(@"%d,%d,%d",stu->_birthday.year,stu->_birthday.month,stu->_birthday.day); //MyDate d2 = d1; //第三种方法,逐个赋值 stu->_birthday.year = 2014; stu->_birthday.month = 12; stu->_birthday.day = 11; NSLog(@"%d,%d,%d",stu->_birthday.year,stu->_birthday.month,stu->_birthday.day); } return 0; }