Sian 发表于 2014-3-10 17:08:20

一个典型的例子说明面向对象的基本设计

本帖最后由 Sian 于 2014-3-10 20:46 编辑

设计一个学生的类,要求该学生具备:1、属性:
      姓名;
      出生日期;
      性别;
      喜好的颜色;
      体重;
      狗:属性(体重、毛色)、方法(吃、跑);
2、方法:
      吃;
      跑;
      遛狗([狗跑]);
      喂狗([狗吃]);


源代码:
#import <Foundation/Foundation.h>
// 定义一个结构体类型 Date 用来定义日期类型数据
typedef struct {
    int year;
    int month;
    int day;
} Date;

// 定义一个枚举类型 Sex 用来定义性别类型数据
typedef enum {
    SexMan,
    SexWoman
} Sex;

// 定义一个枚举类型 Color 用来定义颜色类型数据
typedef enum {
    ColorBlack,
    ColorWrite,
    ColorRed,
    ColorBlue,
    ColorGreen
} Color;

// 创建一个Dog对象
@interface Dog : NSObject {// 对象声明
@public// 成员变量属性设置为public,便于直接对成员变量进行访问,默认为protocted无法直接访问
    double height;// 成员变量height表示身高
    Color color;// 成员变量color表示毛色
}

- (void) eat;// 声明方法:吃
- (void) bray;// 声明方法:叫
- (void) run;// 声明方法:跑
- (void) print;// 声明方法:打印各成员变量值

@end

@implementation Dog// 方法实现

// eat方法使体重增加1,并输出当前体重值
- (void) eat{
    height += 1;
    NSLog(@"dog is eating...height=%.2f", height);
}

// bray方法,输出一行字符串表示
- (void) bray {
    NSLog(@"汪……汪……");
}

// run方法使得体重减少1,并输出当前体重
- (void)run {
    height -= 1;
    NSLog(@"dog is runnig! height=%.2f", height);
}

// print方法输出当前成员变量值
- (void)print {
    NSLog(@"%@: height = %.2f, color = %d", self, height, color);
}
@end


// 创建一个人的对象
@interface Person : NSObject {// 对象声明
@public// 成员变量属性设置为public,便于直接对成员变量进行访问,默认为protocted无法直接访问
    char *name;// 成员变量name,表示姓名
    Date birthday;// 成员变量 birthday表示出生年月日
    Sex sex;// 成员变量sex 表示性别
    Color favColor;// 成员变量favColor表示个人喜好的颜色
    double height;// 成员变量height表示体重
    Dog *dog;// 成员变量dog表示拥有的狗对象
}

// 声明对象方法
- (void)eat;// eat表示吃
- (void)run;// run表示跑
- (void)heyDog;// heyDog表示喂狗
- (void)walkDog;// walkDog表示遛狗
- (void)print;// print方法用来输出当前对象的成员变量值
@end

@implementation Person// 方法实现

// eat方法将成员变量height的值加1,并输出当前体重值
- (void)eat {
    height += 1;
    NSLog(@"Person is running...height=%.2f", height);
}

// run方法将成员变量height的值减1,并输了当前体重值
- (void)run {
    height -= 1;
    NSLog(@"Person is eating...height=%.2f", height);
}

// keyDog方法表示当前正在喂狗,同时调用狗的eat方法,即狗的体重增加1
- (void)heyDog {
    NSLog(@"Person hey the dog...");
    ;
}

// walkDog方法表示当前正在遛狗,同时调用狗的run方法,即狗的体重减1
- (void)walkDog {
    NSLog(@"Person walk the dog...");
    ;
    ;
}

// print方法输出对象所有成员变量的值
- (void)print {
    NSLog(@"%@: name=%s, birthday=(%d-%d-%d), sex=%d, favColor=%d, height=%.2f, dog=%@", self, name, birthday.year, birthday.month, birthday.day, sex, favColor, height, dog);
}
@end

int main() {
   
    Person *p = ;// 创建一个Person对象p
   
    // 给各成员变量赋值
    p->name ="yusian";
   
    p->sex = SexMan;
   
    Date d = {1987,3,21}; // 创建中间临时值,方便一次性赋值
    p->birthday = d;
   
    p->favColor = ColorBlue;
   
    p->height = 72.4;
   
    p->dog = ;// 创建一个Dog对象,并将对象赋值给当前Person对象
   
    // 给Dog对象各成员变量赋值
    p->dog->height = 13.2;
    p->dog->color = ColorBlue;
   
    // 输出对象p的各成员变量值
    ;
   
    // 输出Dog对象的各成员变量值
    ;
   
    // 人跑步
    ;
   
    // 人吃饭
    ;
   
    // 人喂狗
    ;
   
    // 人遛狗
    ;

    return 0;
}
输出结果:2014-03-10 20:45:46.744 a.out <Person: 0x7fd86340ad00>: name=yusian, birthday=(1987-3-21), sex=0, favColor=3, height=72.40, dog=<Dog: 0x7fd863408f40>
2014-03-10 20:45:46.746 a.out <Dog: 0x7fd863408f40>: height = 13.20, color = 3
2014-03-10 20:45:46.746 a.out Person is eating...height=71.40
2014-03-10 20:45:46.746 a.out Person is running...height=72.40
2014-03-10 20:45:46.747 a.out Person hey the dog...
2014-03-10 20:45:46.747 a.out dog is eating...height=14.20
2014-03-10 20:45:46.747 a.out Person walk the dog...
2014-03-10 20:45:46.748 a.out dog is runnig! height=13.20
2014-03-10 20:45:46.748 a.out 汪……汪……




页: [1]
查看完整版本: 一个典型的例子说明面向对象的基本设计