设计类-学生课程信息

要求设计一个类,要求有姓名,年龄,课程信息,和分数;其中课程信息包括课程名称,课程老师、上课时长。手动编写设置器和访问器方法(getter和setter)。

一、getter和setter

1. 概念

在OC里, 为实例变量赋值的方法称作setter(设置器)
读取实例变量值的方法称作getter(访问器)
引入这两个是对面向对象语言封装的最基本的支持。

2. 书写格式

setter的书写格式如下, -(void)setAge:(int)age;即set+首字母大写的实例变量名。
getter的书写格式如下,-(int) age; 即返回值类型与变量类型一致,方法名与实例变量名相同。

3. 与实例变量的关系

无论setter还是getter内部操作的是实例变量
每一个实例变量都需要一对setter和getter方法

4. 调用方法

一般的调用方法,是传统的带中括号[ ]的调用方法,比如

p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #d12f1b}span.s1 {font-variant-ligatures: no-common-ligatures}span.s2 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s3 {font-variant-ligatures: no-common-ligatures; color: #000000}span.s4 {font-variant-ligatures: no-common-ligatures; color: #3d1d81}span.s5 {font-variant-ligatures: no-common-ligatures; color: #31595d}

-(void)printCourse{
    NSLog(@"courseName =%@ courseTime = %li teacherNAme=%@",[self courseName],[self courseTime],[self teacherName]);
}

其中[self courseName] 就是对courseName这个getter方法的调用。

二、类结构的设计

看要求可知,分成两层结构比较简单,一层是学生,一层是课程,学生类中的一些实例变量属于课程类。
课程类中的变量应该包括:课程名称,老师名称,课程时长。
学生类包括:姓名,年龄,对应课程,分数。

需要注意的几点:

  1. 因为在Student类中用到了Course类,所以在Student.h文件中要import Course.h头文件。
  2. Course构造方法是指针,所以在给学生的课程赋值时要用指针赋值。

三、代码

#######Course.h文件

p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #d12f1b}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; min-height: 13.0px}p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo}p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px 'Heiti SC Light'; color: #008400}p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #008400}p.p6 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #bb2ca2}span.s1 {font-variant-ligatures: no-common-ligatures; color: #78492a}span.s2 {font-variant-ligatures: no-common-ligatures}span.s3 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s4 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s5 {font: 11.0px Menlo; font-variant-ligatures: no-common-ligatures}span.s6 {font: 11.0px 'Heiti SC Light'; font-variant-ligatures: no-common-ligatures}

#import <Foundation/Foundation.h>

@interface Course : NSObject
{
    NSString *_courseName;
    NSString *_teacherName;
    NSInteger _courseTime;

}

//构造方法

-(id)initWithCourseName:(NSString *)courseName andCourseTime:(NSInteger)courseTime;

//getter方法
-(NSString *)courseName;
-(NSString *)teacherName;
-(NSInteger)courseTime;

//setter方法
-(void)setTeacherName:(NSString *)teacherName;

//打印课程
-(void)printCourse;

@end

#######Course.m文件

p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #d12f1b}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; min-height: 13.0px}p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #bb2ca2}p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px 'Heiti SC Light'; color: #008400}p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo}p.p6 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #008400}p.p7 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #4f8187}span.s1 {font-variant-ligatures: no-common-ligatures; color: #78492a}span.s2 {font-variant-ligatures: no-common-ligatures}span.s3 {font-variant-ligatures: no-common-ligatures; color: #000000}span.s4 {font: 11.0px Menlo; font-variant-ligatures: no-common-ligatures}span.s5 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s6 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s7 {font-variant-ligatures: no-common-ligatures; color: #3d1d81}span.s8 {font-variant-ligatures: no-common-ligatures; color: #4f8187}span.s9 {font: 11.0px 'Heiti SC Light'; font-variant-ligatures: no-common-ligatures}span.s10 {font-variant-ligatures: no-common-ligatures; color: #31595d}

#import "Course.h"

@implementation Course
//构造方法
-(id)initWithCourseName:(NSString *)courseName andCourseTime:(NSInteger)courseTime
{
    self=[super init];
    if (self) {
        _courseName=courseName;
        _courseTime=courseTime;
    }
    return  self;
}

//getter方法
-(NSString *)courseName
{
    return _courseName;
}

-(NSString *)teacherName
{
    return _teacherName;
}

-(NSInteger)courseTime
{
    return _courseTime;
}

//setter方法
-(void)setTeacherName:(NSString *)teacherName
{
    _teacherName=teacherName;
}

//打印课程
-(void)printCourse{
    NSLog(@"courseName =%@ courseTime = %li teacherNAme=%@",[self courseName],[self courseTime],[self teacherName]);
}

@end

#######Student.h文件

p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; min-height: 13.0px}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #d12f1b}p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo}p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px 'Heiti SC Light'; color: #008400}p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #703daa}p.p6 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #008400}p.p7 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #bb2ca2}span.s1 {font-variant-ligatures: no-common-ligatures}span.s2 {font-variant-ligatures: no-common-ligatures; color: #78492a}span.s3 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s4 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s5 {font-variant-ligatures: no-common-ligatures; color: #4f8187}span.s6 {font: 11.0px Menlo; font-variant-ligatures: no-common-ligatures}span.s7 {font-variant-ligatures: no-common-ligatures; color: #000000}

#import <Foundation/Foundation.h>
#import "Course.h"

@interface Student : NSObject
{
    NSString *_name;
    NSInteger _age;
    NSInteger _score;
    
    Course *_course1;
    Course *_course2;
    Course *_course3;
    
}

//构造方法
-(id)initWithName:(NSString *)name andAge:(NSInteger)age;

//getter方法 读取实际变量的值
-(NSString *)name;
-(NSInteger)age;
-(NSInteger)score;

//setter
-(void)setName:(NSString *)name andAge:(NSInteger)age;

//功能方法
-(NSString *)getAllTeacherNames;
-(NSString *)getAllCourseNames;
-(NSInteger)getAllCourseTimes;
-(void)setCourse:(Course *)aCourse;

//通过课程的索引设置课程
-(void)setCourse:(Course *)newCourse byIndex:(NSInteger)index;

//打印学生信息
-(void)printStudentInfo;

//类方法
+ (void)testStudent;

@end

#######Student.m文件

p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #d12f1b}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; min-height: 13.0px}p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #bb2ca2}p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px 'Heiti SC Light'; color: #008400}p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo}p.p6 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #4f8187}p.p7 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #31595d}span.s1 {font-variant-ligatures: no-common-ligatures; color: #78492a}span.s2 {font-variant-ligatures: no-common-ligatures}span.s3 {font-variant-ligatures: no-common-ligatures; color: #000000}span.s4 {font: 11.0px Menlo; font-variant-ligatures: no-common-ligatures}span.s5 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s6 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s7 {font-variant-ligatures: no-common-ligatures; color: #3d1d81}span.s8 {font-variant-ligatures: no-common-ligatures; color: #4f8187}span.s9 {font-variant-ligatures: no-common-ligatures; color: #d12f1b}span.s10 {font-variant-ligatures: no-common-ligatures; color: #31595d}span.s11 {font-variant-ligatures: no-common-ligatures; color: #272ad8}span.s12 {font: 11.0px 'Heiti SC Light'; font-variant-ligatures: no-common-ligatures; color: #d12f1b}

#import "Student.h"

@implementation Student

//构造方法
-(id)initWithName:(NSString *)name andAge:(NSInteger)age
{
    self=[super init];
    if(self){
        _name =name;
        _age =age;
    }
    return self;
    
}

//功能方法
-(NSString *)getAllCourseNames{
    NSString *str=@"";
    if (_course1) {
        str=[str stringByAppendingString:[_course1 courseName]];
    }
    if (_course2) {
        str=[str stringByAppendingString:[_course2 courseName]];
    }
    if(_course3){
        str=[str stringByAppendingString:[_course3 courseName]];
    }
    return str;
}

-(NSString *)getAllTeacherNames
{
    NSString *str=@"";
    if (_course1) {
        str=[str stringByAppendingString:[_course1 teacherName]];
    }
    if (_course2) {
        str=[str stringByAppendingString:[_course2 teacherName]];
    }
    if (_course3) {
        str=[str stringByAppendingString:[_course3 teacherName]];
        }
    return str;
}

-(NSInteger)getAllCourseTimes
{
    NSInteger time=0;
    if (_course1) {
        time+=[_course1 courseTime];
    }
    if (_course2) {
        time+=[_course2 courseTime];
    }
    if (_course3) {
        time+=[_course3 courseTime];
    }
    return time;
}

-(void)setCourse:(Course *)newCourse byIndex:(NSInteger)index
{
    if (index==1) {
        _course1=newCourse;
    }
    else if (index==2) {
        _course2=newCourse;
    }
    
    else if (index==3) {
        _course3=newCourse;
    }
}

//打印学生信息
-(void)printStudentInfo
{
    NSLog(@"name=%@ age=%li score=%li",[self name],[self age],[self score]);
    [_course1 printCourse];
    [_course2 printCourse];
    [_course3 printCourse];
}

//类方法
+(void)testStudent
{
    Student *stu = [[Student alloc]initWithName:@"zhang" andAge:20];
    Course *course1=[[Course alloc]initWithCourseName:@"chinese" andCourseTime:20];
    [course1 setTeacherName:@"张老师"];
    Course *course2=[[Course alloc]initWithCourseName:@"math" andCourseTime:30];
    [course2 setTeacherName:@"杨老师"];
    Course *course3=[[Course alloc]initWithCourseName:@"english" andCourseTime:40];
    [course3 setTeacherName:@"王老师"];
    
    
    stu->_course1=course1;
    stu->_course2=course2;
    [stu setCourse:course3 byIndex:2];
    
    NSLog(@"%@",[stu getAllCourseNames]);
    
    NSLog(@"%@",[stu getAllTeacherNames]);
    
    NSLog(@"time = %li",[stu getAllCourseTimes]);
}

@end

四、 TODO

setter和getter的改进写法

参考:http://blog.csdn.net/lonelyroamer/article/details/7665112

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容