我无法理解该程序的某些部分问题,并想知道为什么以及如何键入该程序 . 以下是我无法理解的部分:
第三个成员变量是指向double,pquiz的指针 . 这将用于动态分配一个数组,该数组将保存学生的测验成绩 .
(我这样做了吗?)
第四个成员变量是一个双倍保持测验成绩的平均值 .
该类应该有一个接受int的参数构造函数,并将动态分配双测验等级数组 . 或者类可以>有一个两个参数构造函数,它接受一个字符串和一个int .
int是测验成绩的数量
构造函数使用new运算符为测验等级数组分配内存 .
如果有两个参数,则该字符串是学生的姓名 .
该类需要通常的mutator,accessor函数和析构函数 .
该类有一个附加函数average(),它计算pquiz指向的数组中保存的所有测验等级的平均值 . 它返回双平均值 .
我打算打印学生姓名,学生考试的次数和平均分 . 到目前为止,这是我的程序:
#include <iostream>
#include <string>
using namespace std;
class TestScore{
private:
string name;
int grades;
double *pquiz;
double average;
public:
TestScore();
void setName(string);
void setGrades(int);
void setAverage(double);
string getName();
int getGrades();
double getPquiz();
double getAverage();
};
TestScore::TestScore()
{
name="?";
grades=0;
pquiz=0;
average=0;
}
void TestScore::setName(string name1)
{
name=name1;
getline(cin,name1);
}
void TestScore::setGrades(int grades1)
{
grades=grades1;
}
void TestScore::setAverage(double average1)
{
average=average1;
}
string TestScore::getName()
{
return name;
}
int TestScore::getGrades()
{
return grades;
}
double TestScore::getAverage()
{
return average;
}
int main()
{
TestScore exam;
TestScore *ts=&exam;
string name;
int grade;
double *pquiz;
double average;
double total=0.0;
int count;
cout<<"Enter student name: ";
exam.setName(name);
cout<<"How many quizzes are there? ";
exam.setGrades(grade);
cin>>grade;
pquiz=new double[grade];
for(count=0; count<grade; count++)
{
cout<<"Quiz "<<(count+1)<<": ";
cin>>pquiz[count];
}
for(count=0; count<grade; count++)
{
total+=pquiz[count];
}
average=total/grade;
cout<<exam.getName()<<" has an average of "<<average<<endl;
delete [] pquiz;
pquiz=0;
return 0;
}
1 回答
如果我理解正确成员
grades
保存成员pquiz
指向的数组的长度 . 每当设置grades
时pquiz
也必须反映新的更改(应删除旧数组,应创建新数组) . 在构造函数中只能创建数组 . 在setGrades()
必须删除旧并创建新的 .因为成员
pquiz
由类TestScore
控制(或拥有),所以在删除对象TestScore
时(或在我们的术语"when it goes out scope"中)应该删除它是合乎逻辑的 . 这是在类析构函数中完成的,您应该将其添加到类中 .根据文本,应该有一个成员函数
average()
,它计算平均值并将值存储在成员average
中 . 为了您的理智,应该重命名该成员 .