黑马程序员技术交流社区
标题:
关于人的类中出现狗类型对象的问题
[打印本页]
作者:
jx836202365
时间:
2015-9-10 19:54
标题:
关于人的类中出现狗类型对象的问题
本帖最后由 jx836202365 于 2015-9-10 20:51 编辑
这里人这个类里面的一个样了一条狗这句话想了半天才试出来,我把能试的方法试过了才最终从对象定义中看出怎么搞...dog这里居然和int一样可以定义其他对象...
#import <Foundation/Foundation.h>
//定义一个类,名字是dog,父类是NSObject
@interface dog : NSObject
{
//狗的属性声明,他有下面这些属性
//这里加上让dog类属性能够全文件访问
@public
//狗的毛色
NSString *_color;
//狗的速度
float _speed;
//狗的性别,枚举类型
enum sex{公,母}_isex;
//狗的体重
float _weight;
}
//定义类的方法
//狗能吃
-(void)eat;
//狗能叫
-(void)shout;
//狗能跑
-(void)run;
//比较毛色
-(int)comCotherColor:(NSString*)color;
//比较速度
-(float)comSotherspeed:(float)Ospeed;
//结束声明
@end
//方法实现
@implementation dog
//狗吃东西,体重加0.5KG,并且向控制台输出吃完后的体重
-(void)eat{
float *p= &_weight;
*p+=0.5f;//间接访问变量_weight,改变它的值
NSLog(@"体重达到%.2f",_weight);
}
//狗叫得话,输出颜色,速度,性别,重量
-(void)shout{
NSLog(@"color=%@,speed=%.2f,sex=%d,weight=%.2f",_color,_speed,_isex,_weight);
}
//狗跑得话,一次体重减轻0.5KG,没有参数,没有返回值
-(void)run{
float *p=&_weight;
*p-=0.5f;
NSLog(@"speed=%.2f,weight=%.2f",_speed,_weight);
}
//狗和其他狗比较颜色,参数是其他狗的颜色,相同就返回1,不同返回0;有参有返回值
-(int)comCotherColor:(NSString*)color{
if (_color==(NSString*)color) {
return 1;
}else{
return 0;
}
}
//狗和其他狗比较速度,返回它们的差值,有参有返回值
-(float)comSotherspeed:(float)Ospeed{
return _speed-Ospeed;
}
//结束方法
@end
/*
1.声明并且定义一个类叫人类,属性是姓名和拥有狗的名
2.声明并且定义方法.
3.方法是 人指挥狗做一些狗类的属性,狗就执行自己的一些属性,调用自己的方法
人的属性就是名字和拥有一条dog类型的狗
*/
//声明一个类,名字叫做Person ,父类是NSObject
@interface Person : NSObject
{
//这里声明可以让全程序能够访问参数
@public
//人的属性有姓名,对象名是_name
NSString *_name;
//还有一个狗类型的狗,对象名是_dog
dog *_dog;//花了好久想出来...灵感是狗对象的定义,dog能定义对象...
}
//-代表对象的方法,只能由对象调用,+代表类的方法,只能由类调用
//人的方法是
//第一,给食物,狗自己吃东西
-(void)giveD;
//遛狗,狗自己跑
-(void)runD;
@end
//方法的实现
@implementation Person
//给食物方法的实现
-(void)giveD{
//狗自己吃东西,调用对象方法
[_dog eat];
}
//遛狗的方法
-(void)runD{
//狗自己走
[_dog run];
}
@end
int main(){
//自动回收变量
@autoreleasepool {
//定义一个狗类型的对象,对象名是dog1,并且使用new申请内存空间,初始化,最后返回空间的地址给对象,所以用指针接收.
dog *dog1=[dog new];
//dog1的重量,速度,性别,颜色,在此设定
dog1->_weight=78.5f;
dog1->_speed=14.4f;
dog1->_isex=公;
dog1->_color=@"白色";
//如果需要让狗跑,执行狗跑的方法,体重减轻
[dog1 run];
//狗吃东西,执行狗吃东西的方法//体重增加,并且输出体重
[dog1 eat];
//狗咆哮,执行咆哮的结果//输出狗的所有属性
[dog1 shout];
//狗比较速度,知道另一只狗的速度是12.3,得到14.4-12.3
float s=[dog1 comSotherspeed:12.3f];
//并且打印
NSLog(@"%.2f",s);
//定义一个person类型的对象,名字是liming
Person *liming=[Person new];
//对人名初始化为黑色
liming->_name=@"heise";
//让他拥有的狗设定为前面定义的dog1
liming->_dog=dog1;
//他给狗吃东西,狗会执行[dog1 eat]
[liming giveD];
[liming giveD];
[liming runD];
}
return 0;
}
复制代码
设计一个”狗“类
1> 属性
* 颜色
* 速度(单位是m/s)
* 性别
* 体重(单位是kg)
2>行为
* 吃:每吃一次,体重增加0.5kg,输出吃完后的体重
* 吠(叫):输出所有的属性
* 跑:每吃一次,体重减少0.5kg,输出速度和跑完后的体重
* 比较颜色:跟别的狗比较颜色,如果一样,两个值做减法得零,返回NO(零值),不一样,做减法得到非零值,返回YES(1)
* 比较速度:跟别的狗比较速度,返回速度差(自己的速度 - 其他狗的速度)
9,思考&实现:
2.结合前面的“狗”类,设计一个“人”类
1> 属性
* 姓名
* 狗(养了一条狗)
2> 行为
* 喂狗:每喂一次,狗就会执行“吃”这个行为
* 遛狗:每溜一次,狗就会执行“跑”这个行为
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2