在存在~Student::~Student()的前提下,s1Ptr->addGrade(100).addGrade(75).addGrade(89);怎么修改
时间: 2024-06-10 22:05:45 浏览: 55
这个问题涉及到C++的面向对象编程中的析构函数和成员函数链式调用。在存在~Student::~Student()的前提下,可以通过重载Student类的析构函数,在其中完成计算平均分的工作。具体实现可以参考以下步骤:
1. 在Student类中添加一个私有成员变量sum和一个公有成员函数getAvg,用于计算学生的平均分。
2. 在构造函数中初始化sum为0。
3. 重载析构函数,在其中调用getAvg函数打印学生的平均分。
4. 修改addGrade函数,将插入分数的操作改为把分数累加到sum中。
实现代码如下:
```c++
class Student {
public:
Student() : sum(0) {}
~Student() { getAvg(); }
Student& addGrade(int grade) {
sum += grade;
return *this;
}
double getAvg() const {
double avg = sum / static_cast<double>(grades.size());
std::cout << "Average grade: " << avg << std::endl;
return avg;
}
private:
std::vector<int> grades;
double sum;
};
```
然后就可以在main函数中调用s1Ptr->addGrade(100).addGrade(75).addGrade(89)实现链式调用了。调用结束时,析构函数会自动被调用,计算并打印学生的平均分。
阅读全文