【问题标题】:Is it possible to set the class functions in the two functions?是否可以在两个函数中设置类函数?
【发布时间】:2015-03-29 02:39:19
【问题描述】:

我不知道如何将我的类函数调用到printData(Testscore&)readData(TestScore)

另外,有人能告诉我为什么我的Average() 没有被调用到main 吗?我刚刚了解了使用静态成员变量和静态成员函数,并且想知道我是否错误地使用了它们。

readData 函数:

  1. 不使用复制构造函数。
  2. 读取所有实例变量,如学生姓名及其所有 成绩。
  3. 使用函数存储变量、名称、指向私有pquiz的每一级数组的元素和静态成员 grades 要读多少级。

printData 函数:

  1. 写出测验的名称和平均成绩。
  2. 使用复制构造函数。

这是我目前的程序:

#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;
}

【问题讨论】:

  • grades 根本不应该是静态的。

标签: c++ function class static-members


【解决方案1】:

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

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

grades 尚未定义,它可能是零,也可能是 -817。您应该删除该行,或者您可以输入 pquiz = new double[10] 之类的内容,前提是您确定测验的数量不会超过 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,它是一个不指向任何东西的指针,它并不真正存在,你不能这样使用它。

【讨论】:

  • delete pquiz 只有不是NULL delete NULL; 没问题,它会变成nop。
  • 为什么不能在main中声明指针?仍然没有帮助我的问题
猜你喜欢
  • 2022-12-10
  • 2012-08-31
  • 1970-01-01
  • 2014-10-19
  • 2010-09-16
  • 1970-01-01
  • 2015-08-24
  • 2011-09-13
  • 1970-01-01
相关资源
最近更新 更多