标签:
掌握】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;
}
标签:
原文地址:http://www.cnblogs.com/kongweiiwei/p/4676127.html