又经过几周的学习,逐渐对类有了些了解(很机械),也做了不少练习,可学习越是深入,问题也就越是难应付。
在编写这个类时,我遇到了一个棘手的问题,希望各位高手能指点一下。(原代码太长就只)
问题主要集中在detection()函数上,且不论这个函数本身的质量(也许它的确很糟糕)。我的疑问是这个函数是否有必要
纳入到类中,因为在编写这个函数时,我就发现ostream类中的cin在发现输入的数据类型如果不匹配时,只是返回false,并没有
要求重新输入。所以我也开始怀疑是否应该像cin那样处理输入对象的数据。越想越糊涂到底编写类时,那些方法应该封装在类中,
那些应该交给使用类时再去解决。希望大哥,大姐们能帮帮小弟。
最后祝大家五一假期玩的愉快。谢谢!!
#include
#include
class scroe
{private:
char *name;
int num;
float english;
float code;
float math;
double average;
void aver(void){average = (english + code + math)/3.0;};
public:
scroe(const char *inputname="\0", int inputnum=0, float inputenglish=0,float inputcode=0, float inputmath=0);
scroe(const scroe &other);
~scroe(void);
scroe & operator=(const scroe &other);
void enterdata(void);
friend ostream & operator<<(ostream &os, const scroe &other);
friend void detection(const char *studentname,float &inputsomescroe,bool scroe_cin = true);//检测对象数据是否正确
};
scroe::scroe(const char *inputname, int inputnum, float inputenglish,float inputcode, float inputmath)
{
.......
}
scroe::scroe(const scroe &other)
{
.......
}
scroe::~scroe(void)
{
delete [] name;
}
scroe & scroe::operator=(const scroe &other)
{
......
}
void detection(const char *studentname,float &inputsomescroe,bool scroe_cin)
{
//负责检测某一科成绩是否与其数据类型相符
while(!scroe_cin)
{
cin.clear();
while(cin.get()!='\n')
continue;
cout<<"please input a number:";
scroe_cin = cin>>inputsomescroe;
}
//负责判断某一科成绩的输入是否超出了成绩的数值范围
while(inputsomescroe<0 || inputsomescroe>100)
{
cout<<"sorry,"< <<"and enter again:";
while(!(cin>>inputsomescroe))
{
cin.clear();
while(cin.get()!='\n')
continue;
cout<<"please input a number:";
}
}
}
void scroe::enterdata(void)
{
bool scroe_cin;
int len = 0;
float inputenglish = 0;
float inputcode = 0;
float inputmath = 0;
char inputname[50];
cout<<"-----------------------------------------\n"
<<"plase enter a student's data....\n"
<<"this student's name:";
//输入名字
cin.get(inputname,50).get();
delete [] name;
len = strlen(inputname);
name = new char[len + 1];
strcpy(name,inputname);
//输入学号
cout< cin>>num;
//输入英语成绩
cout< scroe_cin = cin>>inputenglish;
detection(name,inputenglish,scroe_cin);
english = inputenglish;
//输入编程成绩
cout< scroe_cin = cin>>inputcode;
detection(name,inputcode,scroe_cin);
code = inputcode;
//输入数学成绩
cout< scroe_cin = cin>>inputmath;
detection(name,inputmath,scroe_cin);
math = inputmath;
aver();
}
ostream & operator<<(ostream &os, const scroe &other)
{
......
}
void main(void)
{
......
}
--------------------next---------------------
阅读(1254) | 评论(0) | 转发(0) |