Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2348940
  • 博文数量: 816
  • 博客积分: 10000
  • 博客等级: 上将
  • 技术积分: 5010
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-17 17:57
文章分类

全部博文(816)

文章存档

2011年(1)

2008年(815)

分类:

2008-12-17 18:08:59

又经过几周的学习,逐渐对类有了些了解(很机械),也做了不少练习,可学习越是深入,问题也就越是难应付。
在编写这个类时,我遇到了一个棘手的问题,希望各位高手能指点一下。(原代码太长就只)
问题主要集中在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---------------------

阅读(1265) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~