A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 liii 于 2015-6-12 21:48 编辑

9,思考&实现:
2.结合前面的“狗”类,设计一个“人”类
1> 属性
* 姓名
* 狗(养了一条狗)
2> 行为
* 喂狗:每喂一次,狗就会执行“吃”这个行为
* 遛狗:每溜一次,狗就会执行“跑”这个行为

  1. // 定义狗的性别类型
  2. typedef enum { kSexMale, kSexFemale } Sex;

  3. // 定义狗的颜色
  4. typedef enum { kColorWhite, kColorBlack, kColorOther} Color;

  5. #pragma mark 狗类的声明
  6. @interface Dog : NSObject
  7. {
  8.     // 属性的声明
  9.     @public
  10.     NSString *_name; // 品种
  11.     Color _color; // 颜色
  12.     int _speed; // 速度
  13.     Sex _sex; // 性别
  14.     double _weight; // 体重
  15. }

  16. // 方法的声明
  17. - (NSString *)sex;

  18. - (NSString *)color;


  19. - (void)initWithDogName:(NSString *)name andColor:(Color)color andSpeed:(int)speed andSex:(Sex)sex andWeight:(double)weight; // 初始化方法

  20. - (void)printWithDogProperty; // 打印狗属性

  21. - (void)eat:(NSString *)food; // 吃方法声明 体重 +0.5

  22. - (void)run; // 跑方法声明 体重 -0.5

  23. @end

  24. #pragma mark Dog 类实现
  25. @implementation Dog

  26. - (void)initWithDogName:(NSString *)name andColor:(Color)color andSpeed:(int)speed andSex:(Sex)sex andWeight:(double)weight
  27. {
  28.     _name = name;
  29.     _color = color;
  30.     _speed = speed;
  31.     _sex = sex;
  32.     _weight = weight;
  33. }

  34. - (NSString *)sex
  35. {
  36.     switch (_sex){
  37.         case kSexMale:
  38.             return @"male";
  39.             break;
  40.         case kSexFemale:
  41.             return @"female";
  42.             break;
  43.         default:
  44.             break;
  45.     }
  46. }

  47. - (NSString *)color
  48. {
  49.     switch (_color) {
  50.         case kColorWhite:
  51.             return @"white";;
  52.             break;
  53.         case kColorBlack:
  54.             return @"black";
  55.             break;
  56.         case kColorOther:
  57.             return @"other";
  58.             break;
  59.         default:
  60.             break;
  61.     }
  62. }

  63. - (void)printWithDogProperty
  64. {
  65.     NSLog(@"%@ 的颜色为: %@ 速度%d m/s 性别为: %@ 体重为: %.1f斤", _name, self.color, _speed, self.sex, _weight);
  66. }

  67. - (void)eat:(NSString *)food // 吃方法的实现
  68. {
  69.     _weight += 0.5;
  70.     NSLog(@"%@吃完 \"%@\" 的体重为:%.1f", _name, food, _weight);
  71. }


  72. - (void)run // 跑方法实现
  73. {
  74.     _weight -= 0.2;
  75.         NSLog(@"%@跑完的体重为:%.1f", _name, _weight);
  76. }

  77. @end

  78. #pragma mark Person类的声明
  79. @interface Person : NSObject
  80. {
  81.     NSString *_name;
  82.     Dog *_dog; // 把对象做为成员变量
  83. }

  84. - (void)feedDog:(Dog *)dog withFood:(NSString *)food; // 声明喂狗方法

  85. - (void)liuDog:(Dog *)dog; // 声明遛狗方法

  86. @end

  87. #pragma mark Person 类的实现
  88. @implementation Person

  89. - (void)feedDog:(Dog *)dog withFood:(NSString *)food // 实现喂狗食物的方法
  90. {
  91.     [dog eat:food];

  92. }

  93. - (void)liuDog:(Dog *)dog // 实现遛狗方法
  94. {
  95.     [dog run];
  96. }

  97. @end



  98. int main(int argc, const char * argv[]) {
  99.     @autoreleasepool {
  100.         // 创建 Dog 对象
  101.         Dog *husky = [Dog new];
  102.         
  103.         // 初始化对象
  104.         [husky initWithDogName:@"husky" andColor:kColorBlack andSpeed:30 andSex:kSexFemale andWeight:35];
  105.         
  106.         // 输出属性
  107.         [husky printWithDogProperty];
  108.         
  109.         // 创建 Person 对象
  110.         Person *jack = [[Person alloc] init];
  111.         
  112.         // 喂狗 +0.5
  113.         [jack feedDog:husky withFood:@"面条"];
  114.         
  115.         // 遛狗 -0.2
  116.         [jack liuDog:husky];
  117.         
  118.     }
  119.     return 0;
  120. }
复制代码


评分

参与人数 3黑马币 +25 收起 理由
仅此一抹心醉 + 8 赞一个!
杨宇俊 + 9
yi95392 + 8 很给力!

查看全部评分

2 个回复

倒序浏览
给杰哥顶一个!
回复 使用道具 举报
围观学习啦,加油!!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马