是否可以在两个函数中设置类函数?

时间:2015-03-29 02:39:19

标签: c++ function class static-members

我不知道如何将我的班级功能调用到printData(Testscore&)readData(TestScore)

另外,有人可以告诉我为什么我Average()没有被main打电话?我刚学会了使用静态成员变量和静态成员函数,并想知道我是否错误地使用它们。

readData功能:

  1. 不使用复制构造函数。
  2. 读取所有实例变量,例如学生的姓名及其所有名称 等级。
  3. 使用函数存储变量,名称,指向私有pquiz的每个数组等级的元素,以及静态成员 grades要阅读多少年级。
  4. printData功能:

    1. 写出测验的名称和平均成绩。
    2. 使用复制构造函数。
    3. 到目前为止,这是我的计划:

      #include <iostream>
      #include <string>
      
      using namespace std;
      
      class TestScore {
      private:
          static int grades;
          string name;
          double *pquiz;
          double average;
      public:
          TestScore();
          ~TestScore();
          void setName(string);
          static void setGrades(int);
          void setPquiz(double *);
          void setAverage(double);
          string getName();
          static int getGrades();
          double getPquiz();
          void readData(TestScore &);
          void printData(TestScore);
          double Average(double *, int);
          static void Grade(int);
      };
      
      TestScore::TestScore() {
          name="";
          pquiz=new double[grades];
          average=0;
      }
      
      void TestScore::setName(string name1) {
          if(name1!="1") {
              name=name1;
          }
      }
      
      void TestScore::setPquiz(double *pquiz1) {
          if(pquiz>=0) {
              pquiz=pquiz1;
          }
      }
      
      void TestScore::setGrades(int grades1) {
          if(grades1>=0) {
              grades=grades1;
          }
      }
      
      void TestScore::setAverage(double average1) {
          if(average1>=0) {
              average=average1;
          }
      }
      
      string TestScore::getName() {
          return name;
      }
      
      int TestScore::getGrades() {
          return grades;
      }
      
      double TestScore::getPquiz() {
          return *pquiz;
      }
      
      
      double Average(double *pquiz, int grade) {
          int count;
          double total=0;
          double average=0;
          for(count=0; count<grade; count++) {
              total+=pquiz[count];
          }
          average=total/grade;
          return average;
      }
      
      void readData(TestScore&) {
      
      }
      void printData(TestScore) {
      
      }
      
      TestScore::~TestScore() {
          delete [] pquiz;
          pquiz=0;
      }
      
      int TestScore::grades=0;
      void TestScore::Grade(int a) {
          grades+=a;
      }
      
      
      
      int main() {
          const int grades = 3;
          const int students = 4;
          TestScore exam;
          string student;
          int grade;
          double *pquiz;
          double average;
          for(int i=0; i<students; i++) {
              cout<<"Student "<<(i+1)<<": ";
              cin>>student;
              exam.setName(student);
              cout<<endl;
      
              for(int count=0; count<grades; count++) {
                  cout<<"Quiz "<<(count+1)<<": ";
                  cin>>pquiz[count];
                  exam.setPquiz(pquiz);
                  exam.getPquiz();
      
                  while(pquiz[count]<0) {
                      cout<<"Error, invalid test score, please try again."<<endl;
                      cout<<"Quiz "<<(count+1)<<": ";
                      cin>>pquiz[count];
                  }
              }
              exam.setAverage(average);
              cout<<exam.getName()<<" average is "<<Average(pquiz, grade)<<endl<<endl;
          }
          readData(exam);
          printData(exam);
      
          return 0;
      }
      

1 个答案:

答案 0 :(得分:0)

不要在任何地方使用static,至少现在不行。你有太多同名的变量,散落在各处。尝试清理它们。

TestScore::TestScore()
{
    name = "";
    //pquiz = new double[grades];//#grades is undefined
    pquiz = NULL;
    average = 0;
}

grades尚未定义,可能为零,也可能为-817。您应该删除该行,或者如果您确定测验的数量不超过10,则可以添加pquiz = new double[10]之类的内容。

TestScore::~TestScore()
{
    if (pquiz) delete[] pquiz;
    pquiz = NULL;
}

delete pquiz仅当它不是NULL

int main() {
    const int grades = 3;
    const int students = 4;
    TestScore exam;
    string student;
    int grade;
    double *pquiz;
...

这是一个不同的pquiz,它是一个指向任何东西的指针,它并不存在,你不能那样使用它。