我无法理解该程序的某些部分问题,并想知道为什么以及如何键入该程序。以下是我无法理解的部分:
第三个成员变量是指向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;
}
答案 0 :(得分:0)
如果我理解正确,则成员grades
保存成员pquiz
指向的数组的长度。每当设置grades
时,pquiz
也必须反映新的更改(应删除旧数组,应创建新数组)。在构造函数中只能创建数组。在setGrades()
中必须删除旧的并创建新的。
由于成员pquiz
由类TestScore
控制(或拥有),因此删除对象TestScore
时(或在我们的术语中)应该删除它是合乎逻辑的&#34;当它超出范围&#34;)。这是在类析构函数中完成的,您应该将其添加到类中。
根据文本,应该有一个成员函数average()
,它计算平均值并将值存储在成员average
中。为了您的理智,应该重命名该成员。