掌握】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; }
时间: 2024-10-08 01:52:50