黑马程序员技术交流社区
标题:
学生每学习一次,各科成绩就会+1,这题咋做?
[打印本页]
作者:
chaoren
时间:
2015-3-12 16:40
标题:
学生每学习一次,各科成绩就会+1,这题咋做?
#import <Foundation/Foundation.h>
@interface Score : NSObject
{
int _cScore;
int _ocScore;
int _iOSScore;
}
- (void)setCScore:(int)newCScore;
- (int)cScore;
- (int)ocScore;
- (int)iOSScore;
- (void)setOcScore:(int)newOcScore;
- (void)setIosScore:(int)newIosScore;
- (void)addScore:(Score *)Xscore add :(int) num;
@end
//score方法实现
@implementation Score
- (void)setCScore:(int)newCScore
{
_cScore = newCScore;
NSLog(@"已经给c成绩赋值_cScore:%d",_cScore);
}
- (int)cScore
{
return _cScore;
}
- (int)ocScore
{
return _ocScore;
}
- (int)iOSScore
{
return _iOSScore;
}
- (void)setOcScore:(int)newOcScore
{
_ocScore = newOcScore;
NSLog(@"已经给oc成绩赋值:_ocscore=%d",_ocScore);
}
- (void)setIosScore:(int)newIosScore
{
_iOSScore = newIosScore;
NSLog(@"已经给ios成绩赋值:_iOSScore=%d",_iOSScore);
}
<font color="#ff0000">- (void)addScore:(Score *)Xscore add :(int) num
{
switch (Xscore) {
case cscore:
_cScore += num;
break;
case ocscore:
_ocScore += num;
break;
case iosscore:
_iOSScore += num;
break;
default:
break;
}</font>
}
@end
@interface Student : NSObject
{
Score *_score;//成绩。组合
}
- (void)setScore:(Score *)newScore;
- (Score *)score;
- (void)study;//每学习一次,3可成绩各加1分,输出学习完后的3科成绩
@end
//学生类的方法实现
@implementation Student
- (void)setScore:(Score *)newScore
{
_score = newScore;//给成绩赋值
NSLog(@"现在给score赋值:cscore:%d-ocscore:%d-iosscore:%d",[_score cScore],[_score ocScore],[_score iOSScore]);
}
- (Score *)score//返回成绩
{
return _score;
}
- (void)study//每学习一次,3可成绩各加1分,输出学习完后的3科成绩
{
NSLog(@"现在c语言成绩:%d,+1",[_score cScore]);
<font color="#ff0000"> [_score addScore:cscore add :1];</font>
NSLog(@"现在oc成绩:%d,+1",[_score ocScore]);
<font color="#ff0000"> [_score addScore:ocscore add :1];</font>
NSLog(@"现在ios成绩:%d,+1",[_score iOSScore]);
<font color="#ff0000"> [_score addScore:iosscore add :1];</font>
NSLog(@"学习完,三科成绩为:_cScore=%d,_ocScore=%d,_iOSScore=%d",[_score cScore],[_score ocScore],[_score iOSScore]);
}
@end
int main()
{
Student *stu = [Student new];
Score *s = [Score new];
[s setCScore:80];
[s setOcScore:79];
[s setIosScore:91];
[stu setScore:s];
[stu study];
return 0;
}
复制代码
我想用同一个方法实现分别对三门功课成绩+1对操作,想传一个分数名称过去,请问我该咋写?
作者:
岳挺
时间:
2015-3-12 17:09
study方法里面不是已经实现了吗?每次调用study方法一次就会各科成绩加1,你就是这个意思吧
作者:
hastar
时间:
2015-3-12 18:28
没理解你的问题
作者:
TRY!
时间:
2015-3-12 18:51
+_+ ~~~
作者:
chaoren
时间:
2015-3-12 20:01
岳挺 发表于 2015-3-12 17:09
study方法里面不是已经实现了吗?每次调用study方法一次就会各科成绩加1,你就是这个意思吧 ...
但是我的代码报错
作者:
xiezhongmin
时间:
2015-3-14 19:00
switch (Xscore) {
case cscore:
_cScore += num;
break;
case ocscore:
_ocScore += num;
break;
case iosscore:
_iOSScore += num;
break;
default:
break;
你不觉得这段代码有问题吗,你switch指针干嘛?,三课成绩都加num干嘛要写swich整的这么复杂也不需要在score类写这个方法,直接在学生类的学习方法里写把传进来的(score *)newscore _scroe .哪课的成员变量+=_scroe .哪课的成员变量;然后输出就可以了
作者:
xiezhongmin
时间:
2015-3-14 19:02
是 _scroe .哪课的成员变量++;
作者:
xiezhongmin
时间:
2015-3-14 19:20
你又在学生学习方法里调用[_score addScore:cscore add :1],这个cscore是对象吗是指针吗,这是基本数据类型,接口类型不匹配。如果你非要扔掉面向对象的思想,绕一大圈的话,“-(void)addScore:(Score *)Xscore add :(int) num”你这个方法提供的接口应该是基本数据类型各科的分数成员变量
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2