本帖最后由 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> 行为
* 喂狗:每喂一次,狗就会执行“吃”这个行为
* 遛狗:每溜一次,狗就会执行“跑”这个行为
|
|