首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请问代码重用的一个试例

2012-02-25 
请教代码重用的一个试例//以下是一个包含对象成员的类的度例//但编译时总有两条错误,//请大家帮忙看看//这

请教代码重用的一个试例
//以下是一个包含对象成员的类的度例
//但编译时总有两条错误,
//请大家帮忙看看
//这是一个studentc.h文件


#ifndef STUDENTC_H
#define STUDENTC_H

#include<iostream>
#include<cstring>
#include<valarray>
//using namespace std;

class Student
{
private:
typedef std::valarray<double> ArrayDb;//定义一个类型
std::string name;//string类的name 对象
ArrayDb scores;//arraydb类的scores对象
std::ostream & arr_out(std::ostream & os)const;//定义了个输出
public:
//下面为几个构造函数:
Student():name("Null name"),scores(){}
Student(const std::string & s):name(s),scores(){}
explicit Student(int n):name("Nully"),scores(n){}
Student(const std::string & s,int n)
:name(s),scores(n){}
Student(const std::string & s,const ArrayDb & a)
:name(s),scores(a){}
Student(const char *str,const double *pd,int n)
:name(str),scores(pd,n){}
~Student(){}
double Average()const;//求平均成绩
const std::string & Name()const;
double & operator[](int i);
double operator[](int i)const;
//friends
//input
friend std::istream & operator>>(std::istream & is,
Student & stu);
friend std::istream & getline(std::istream & is,
Student & stu);
//output
friend std::ostream & operator<<(std::ostream & os,
const Student & stu);


};
#endif







//这是类的实现student.cpp文件

//student.cpp___student class using containment
#include"studentc.h"
using std::ostream;
using std::endl;
using std::istream;
using std::string;


//public methods
double Student::Average()const
{
if(scores.size()>0)
return scores.sum()/scores.size();
else
return 0;
}
const string & Student::Name()const
{
return name;
}
double & Student::operator [](int i)
{
return scores[i];
}
double Student::operator [](int i)const
{
return scores[i];
}
//private method
ostream & Student::arr_out(ostream & os)const
{
int i;
int lim=scores.size();
if(lim>0)
{
for(i=0;i<lim;i++)
{
os<<scores[i]<<" ";
if(i%5==4)
os<<endl;
}
if(i%5!=0)
os<<endl;
}
else
os<<"empty array";
return os;
}
//friends

//use string version of operator>>()
istream & operator>>(istream & is,Student & stu)
{
is>>stu.name;
return is;
}
//use string friend getline(ostream &,const string &)
istream & getline(istream & is,Student & stu)
{
getline(is,stu.name);
return is;
}
//use string version of operator<<()
ostream & operator<<(ostream & os,const Student & stu)
{
os<<"Scores for"<<stu.name<<":\n";
stu.arr_out(os);//use private method for scores 
return os;
}







//以下是用以测试的use_stuc.cpp文件

#include<iostream>
#include"studentc.h"
using std::cin;
using std::cout;
using std::endl;
//using namespace std;

void set(Student & sa,int n);

const int pupils=3;
const int quizzes=5;

int main()
{
Student ada[pupils]=
{Student(quizzes),Student(quizzes),Student(quizzes)};

int i;
for(i=0;i<pupils;)
set(ada[i],quizzes);
cout<<"\nStudent List:\n";
for(i=0;i<pupils;++i)
cout<<ada[i].Name()<<endl;
cout<<"\nResults:";
for(i=0;i<pupils;++i)
{
cout<<endl<<ada[i];


cout<<"average:"<<ada[i].Average()<<endl;
}
cout<<"Done.\n";
return 0;

}

void set(Student & sa,int n)
{
cout<<"Plaese enter the student's name:";
getline(cin,sa);
cout<<"Please enter"<<n<<"quiz scores:\n";
for(int i=0;i<n;i++)
cin>>sa[i];
while(cin.get()!='\n')
continue;
}

[解决办法]
很乱

C/C++ code
h-------#ifndef STUDENTC_H #define STUDENTC_H #include <iostream> #include <valarray> /*#include <string>*///using namespace std; class Student { private:         typedef std::valarray <double> ArrayDb;//定义一个类型     std::string name;//string类的name 对象     ArrayDb scores;//arraydb类的scores对象     std::ostream & arr_out(std::ostream & os)const;//定义了个输出 public:     //下面为几个构造函数:     Student():name("Null name"),scores(){}     Student(const std::string & s):name(s),scores(){}     explicit Student(int n):name("Nully"),scores(n){}     Student(const std::string & s,int n)         :name(s),scores(n){}     Student(const std::string & s,const ArrayDb & a)         :name(s),scores(a){}     Student(const char *str,const double *pd,int n)         :name(str),scores(pd,n){}     ~Student(){}     double Average()const;//求平均成绩     const std::string & Name()const;     double & operator[](int i);     double operator[](int i)const;     //friends     //input     friend std::istream & operator >>(std::istream & is,         Student & stu);     friend std::istream & Mygetline(std::istream & is,         Student & stu);     //output     friend std::ostream & operator <<(std::ostream & os,         const Student & stu); }; #endif cpp------#include <string>using namespace std;//public methods double Student::Average()const {     if(scores.size() >0)         return scores.sum()/scores.size();     else         return 0; } const string & Student::Name()const {     return name; } double & Student::operator [](int i) {     return scores[i]; } double Student::operator [](int i)const {     return scores[i]; } //private method ostream & Student::arr_out(ostream & os)const {     int i;     int lim=scores.size();     if(lim >0)     {         for(i=0;i <lim;i++)         {             os << scores[i] <<" ";             if(i%5==4)                 os << endl;         }         if(i%5!=0)             os << endl;     }     else         os <<"empty array";     return os; } //friends //use string version of operator >>() istream & operator >>(istream & is,Student& stu) {     is >> stu.name;     return is; } //use string friend getline(ostream &,const string &) istream& Mygetline(istream & is,Student& stu) {     getline(is, stu.name);     return is; } //use string version of operator <<() ostream & operator <<(ostream & os,const Student & stu) {     os <<"Scores for" <<stu.name <<":\n";     stu.arr_out(os);//use private method for scores      return os; } main.cpp---------#include <iostream> using std::cin; using std::cout; using std::endl; //using namespace std; void set(Student & sa,int n); const int pupils=3; const int quizzes=5; int main() {     Student ada[pupils]=     {Student(quizzes),Student(quizzes),Student(quizzes)};     int i;     for(i=0;i <pupils;)         set(ada[i],quizzes);     cout <<"\nStudent List:\n";     for(i=0;i <pupils;++i)         cout <<ada[i].Name() <<endl;     cout <<"\nResults:";     for(i=0;i <pupils;++i)     {         cout << endl <<ada[i];         cout <<"average:" <<ada[i].Average() <<endl;     }     cout <<"Done.\n";     return 0; } void set(Student & sa,int n) {     cout <<"Plaese enter the student 's name:";     Mygetline(cin,sa);     cout <<"Please enter" <<n <<"quiz scores:\n";     for(int i=0;i <n;i++)         cin >>sa[i];     while(cin.get()!= '\n ')         continue; } 

热点排行
Bad Request.