黑马程序员-类的合理设计

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------

typedy enum

{

Sexman,

Sexwoman/*不直接写woman而带上枚举名Sex,给人一目了然,知道是哪个枚举里的常量*/

} Sex;//枚举大括号后面,变量之间有个空格

 

typedef struct{

int month;

int day; 

int year;

} Date;

 

typedef enum{

   ColorBlack;

   ColorYellow;

   ColorRed;

} Color;

/*

 

学生类

成员变量:性别,生日,体重,喜欢颜色,狗(体重,毛色,吃,跑)

方法:吃,跑步,遛狗,喂狗

*/

#import <Foundation/Foundation.h>

@interface Dog :NSObject

{

   double weight;//体重

   Color curColor;//毛色

  

}

- (void)eat;

- (void)run;

@end

 

@implementation Dog

- (void)eat

{

   weight +=1;

NSLog(@"狗吃完后体重为%f",weight);

}

- (void)run

{

   weight -=1;

   NSLog(@"狗跑后的体重是%f",weight);

}

@end

 

@interface Student :NSObject

{

//成员变量什么类型都可以的

   @Public

   Sex sex;//性别

   Date birthday;//生日

   double weight;//体重

   Color favColor;//最喜欢颜色

   Char *name;

   //重点:狗属性

   Dog *dog;//任何OC对象都是指针指向

}

- (void)eat;//减号后面有个空格

- (void)run;

- (void)print;

- (void)weiDog;

- (void)liuDog;

@end

 

@implementation Student

-(void)eat

{

   weight +=1;

NSLog(@"学生吃完后体重为%f",weight);

}

- (void)run

{

   weight -=1;

   NSLog(@"学生跑后的体重是%f",weight);

}

- (void)print

{

   //对象方法访问内部的成员变量,直接写成员变量即可

   NSLog(@"姓名是%s,性别是%d,喜欢的颜色=%d,生日=%d-%d-%

d",name,sex,favColor,birthday.year,birthday.month,birthday.day);

}

- (void)weiDog

{

   //让狗跑起来调用狗的run方法   

   [dog run];

}

- (void)liuDog

{

   [dog eat];//调用狗的eat方法

}

 

@end

 

int main()

{

   Student *s=[Student new];

 

   Dog *d = [Dog new];

   d->curColor =Color Green;

   d->weight =20;

   s->dog =d;

 

   //s->dog =[Dog new];//对象里有对象,这才叫真正的面向对象

   s->weight=50.0;

  

   //性别

   s->sex =SexMan;

  

   //生日

   /*s->birthday ={2011,9,23};这句话错误的原因是因为定义结构体变量的同时进行初始化才行,前面已经Date结构体定义过结构体变量birthday,现在不能再整体赋值,只能针对结构体里面单个变量进行改变.例如:s->birthday.year =2015;*/

  

   Date d ={2011,9,23};

   s->birthday =d;

   s->name ="Jack";

   s->favColor =ColorBlack;

 

   [s eat]

   [s run]

 

   [s print];

   [s liuDog];

   [s weiDog];

   return 0;

}

 

 

 

/*计算机类

方法:

1>返回PI

2>计算两个整数的和

3>计算某个整数的平方

*/

 

#import <Foudation/Foundation.h>

@interface JSQ: NSObject

//方法名:pi

- (double)pi;

 

//OC方法中,一个参数对应一个冒号

//方法名:pingfang:(冒号也是方法名的一部分)同一个类中不允许两个对象方法同名

- (int)pingfang:(int)num;

 

//- (int)sum:(int)num1 :(int)num2

//方法名:sumWithNum1: andNum2:

- (int)sumWithNum1:(int)num1 andNum2:(int)num2

@end

 

@implementation JSQ

- (double)pi

{

   return 3.14;

}

//- (int)sum:(int)num1 :(int)num2//在num1后面一定要加个空格

- (int)sumWithNum1:(int)num1 andNum2:(int)num2

{

   return num1+num2;

}

-(int) pingfang:(int)num

{

   return num*num;

}

@end

 

int main()

{

   JSQ *jsq =[JSQ new];

  

   double a= [jsq pi];

   int a = [jsq pingfang:10];

   int b = [jsq sum:10 :5];//对应方法定义,10后面有空格

   [jsq sumWithNum1:10 andNum2:5];

   NSLog(@"%d",a);

   return 0;

}

 

 

//用来和其他车比较车速,返回车速差距

#import <Foundation/Foundation.h>

@interface Car: NSObject

{

   @public

   int speed;

}

//int 为返回值类型,Car * 是对象指针,要搞清楚

- (int)compareWithOther:(Car *)other  //如何设计的也要学会

@end

 

@implementation

- (int)compareSpeedWithOther:(Car *)other

{

   //speed

   //other->speed

   //返回当前车速与另一个车速的差距

   return speed - other->speed

}

 

@end

 

int main()

{

   Car *c1 = [Car new];

/*匿名对象

[Car new]->speed= 300;(1)

[[Car new] run](2) 调用run后speed的值依然是0

1,2两句里面的对象是不一样的。这样的代码不好,不要这样写。只要求能看懂这种语法。

 

*/

   c1->speed =300;

   Car *c2 =[Car new];

   c2->speed =260;

 

   int a = [c1 compareSpeedWithOther:c2];//如何调用

  

   NSLog(@"a=%d",a);

   return 0;

}

 

需要注意的是:

1.-(int)run  减号后面一定要有空格

2.函数要写注释,函数名通俗易懂

3.return a==b;//直接相等返回1,不相等返回0,写法简便明了

 

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------详细请查看: www.itheima.com
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值