一个典型的例子说明面向对象的基本设计
本帖最后由 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]