Objective - C基础: 第一天 - 10.如何合理的设计一个类
来源:互联网 发布:中秋大数据 编辑:程序博客网 时间:2024/06/05 04:19
前面我们已经讲解完了一些基础知识, 注意事项, 还有一些简单的例子, 那么今天我们来设计一个属于我们自己的类, 要怎么做才设计的合理呢? 下面我们来看看~~
首先我们得知道要做什么, 比如我要设计一个学生的类, 那么要如何设计呢?
类名: 学生
属性: 名字, 性别, 体重, 身高, 生日
行为(方法): 跑步, 吃东西
我们来详细分析一下:
1. 我们知道了学生的属性有五个, 分别是姓名, 性别, 生日, 体重, 身高
如果按照我们一般的思维来设计的话, 没有经验的人应该会这么写:
@interface Student : NSObject{ @public int year; //年 int month; //月 int day; //日 char *name; //名字 double weight; //体重 int height; //身高 char *sexMan; //性别男 char *sexWomen; //性别女}@end
这样子写的坏处, 一旦创建的对象多了, 那不就要写的累死人了吗? 为了方便, 我们应该把一些固定的东西抽出来做成一个枚举, 把一些相同的类型抽出来做成一个结构体:
typedef enum{ SexMan, SexWomen}Sex;typedef struct{ int year; int month; int day;}Date;@interface Student : NSObject{ @public char *name; //名字 double weight; //体重 int height; //身高 Date birthday; //生日 Sex sex; //性别}- (void)eat;- (void)run;@end
而且还可以顺便把下面的两个方法给声明, 知道了这些信息之后, 我们就可以继续往下:
@implementation Student- (void)eat{ weight += 1; NSLog(@"吃完一次之后的体重是:%.2f/kg", weight);}- (void)run{ weight -= 1; NSLog(@"运动完一次之后的体重是:%.2f/kg", weight);}@end
方法我们也实现好了, 那么主要就看main()函数里面要怎么去给成员变量赋值了:
int main(){ Student *xiaoming = [Student new]; xiaoming->name = "xiaoming"; xiaoming->sex = SexMan; xiaoming->height = 165; xiaoming->weight = 55.5; Date d = {1999, 1, 9}; xiaoming->birthday = d; [xiaoming print]; return 0;}
main()函数里面也搞定了之后, 如果我们需要知道学生的信息, 那么我们可以再写一个方法把学生的信息打印出来:
- (void)print{ NSLog(@"这名学生叫%s, 他的性别是%d, 体重是%.2f/kg, 身高是%d/cm, 生日是%d-%d-%d.", name, sex, weight, height, birthday.year, birthday.month, birthday.day);}
输出的结果:
2015-01-14 16:01:13.067 a.out[9033:937651] 这名学生叫xiaoming, 他的性别是0, 体重是55.50/kg, 身高是165/cm, 生日是1999-1-9.
但是, 还有一个问题, 我们这里需要再考虑一个事情, 有些生日的日期是XXXX-XX-X这样子的格式, 如果有这样子的需求, 我们必须得去解决, 该怎么解决呢? 下面我们来看看:
- (void)print{ if (birthday.month < 10) { NSLog(@"这名学生叫%s, 他的性别是%d, 体重是%.2f/kg, 身高是%d/cm, 生日是%d-0%d-%d.", name, sex, weight, height, birthday.year, birthday.month, birthday.day); } else { NSLog(@"这名学生叫%s, 他的性别是%d, 体重是%.2f/kg, 身高是%d/cm, 生日是%d-%d-%d.", name, sex, weight, height, birthday.year, birthday.month, birthday.day); }}
输出的结果:
2015-01-14 16:02:59.959 a.out[9039:938372] 这名学生叫xiaoming, 他的性别是0, 体重是55.50/kg, 身高是165/cm, 生日是1999-01-9.
看到这里或许有人会疑问, 为什么性别是0呢??? 让我们回忆一下枚举类型里面存储的是什么东西, 没错~~~枚举类型里面存的是整型, 默认是从0开始~~~在这里性别男是0, 所以打印出来的结果就是0.
补充一些知识点:
在我们实际开发中, 枚举类型最好是以枚举名开头, 比如:
typedef enum{ SexMan, SexWomen}Sex;
这样子方便团队合作的时候别人知道对应的是什么枚举类型.
还有在main()函数里面的结构体赋值, 我之前讲过, 创建好对象的时候不可以再给结构体赋值, 只有再初始化的时候才可以给结构体赋值, 这里我举几个简单的方法解决这个问题:
1. Date d = {1999, 1, 9}; xiaoming->birthday = d;2. xiaoming->birthday.year = 1999; xiaoming->birthday.month = 1; xiaoming->birthday.day = 9;3. Date d = xiaoming->birthday; d.year = 1999; d.month = 1; d.day = 9; xiaoming->birthday = d;
在这里, 哪个简单就使用哪个, 所以推荐使用第一个~~其他两个方法了解就好了~~
那么最终的效果就是:
<span style="font-size:12px;">#import <Foundation/Foundation.h>typedef enum{ SexMan, SexWomen}Sex;typedef struct{ int year; int month; int day;}Date;@interface Student : NSObject{ @public char *name; //名字 double weight; //体重 int height; //身高 Date birthday; //生日 Sex sex; //性别}- (void)eat;- (void)run;@end@implementation Student- (void)eat{ weight += 1; NSLog(@"吃完一次之后的体重是:%.2f/kg", weight);}- (void)run{ weight -= 1; NSLog(@"运动完一次之后的体重是:%.2f/kg", weight);}- (void)print{ if (birthday.month < 10) { NSLog(@"这名学生叫%s, 他的性别是%d, 体重是%.2f/kg, 身高是%d/cm, 生日是%d-0%d-%d", name, sex, weight, height, birthday.year, birthday.month, birthday.day); } else { NSLog(@"这名学生叫%s, 他的性别是%d, 体重是%.2f/kg, 身高是%d/cm, 生日是%d-%d-%d", name, sex, weight, height, birthday.year, birthday.month, birthday.day); }}@endint main(){ Student *xiaoming = [Student new]; xiaoming->name = "xiaoming"; xiaoming->sex = SexMan; xiaoming->height = 165; xiaoming->weight = 55.5; Date d = {1999, 1, 9}; xiaoming->birthday = d; [xiaoming print]; return 0;}</span>
好了, 这次我们就到这里, 下次我们继续~~~
- Objective - C基础: 第一天 - 10.如何合理的设计一个类
- Objective - C基础: 第一天 - 5.对象和类
- Objective-C 第一天
- Objective-C 第一天
- Objective - C基础: 第一天 - 3.BOOL基本认识
- Objective - C基础: 第一天 - 8.OC对象与函数
- Objective - C基础: 第一天 - 9.常见错误
- Objective - C基础: 第一天 - 12.方法练习
- Objective - C基础: 第一天 - 11.OC方法的基本认识
- Objective - C基础: 第一天 - 13.匿名对象的基本认识
- Objective - C基础: 第一天 - 6.第一个OC类练习
- Objective - C基础: 第一天 - 7.第二个OC类练习
- Objective-C学习第一天
- 初学Objective - C 第一天
- 第一天(c基础)
- 郝斌的C语言基础 115 合理设计函数
- 如何正确合理的设计一个接口项目
- [转]如何正确合理的设计一个接口项目
- Container With Most Water
- Python笔记——类与继承
- adb读取SD卡CID的CRC错误
- POJ 1821 Fence(DP+单调队列优化)
- 第8题:字符串长度
- Objective - C基础: 第一天 - 10.如何合理的设计一个类
- JAVA集合操作的利器:CollectionUtils
- plist的使用和读取
- android的消息处理机制(图+源码分析)——Looper,Handler,Message
- 如何取消或定制当点击GridView 的时候出现的那个黄色背景
- 冒泡排序、快速排序示例
- 编程珠玑之第三章习题1
- 集合的常用操作类CollectionUtils
- HDU 3342 -- Legal or Not(拓扑排序)