使用动态内存分配创建封装的动态学生类Student的对象数组class,在主函数中计算所有学生每1门课程的平均成绩并输出。学生类Student中包含当前学生对象的姓名、学号和三门课程的成绩,在主函数中要求用户输入学生人数num,并根据输入的学生人数num创建动态对象数组。
时间: 2023-12-03 12:47:30 浏览: 64
设计一个学生类Student(学生学号、姓名、数学、英语、计算机成绩;)
5星 · 资源好评率100%
以下是使用动态内存分配创建封装的动态学生类Student的对象数组class,并计算所有学生每1门课程的平均成绩并输出的完整代码:
```c++
#include <iostream>
#include <string>
using namespace std;
class Student {
public:
// 构造函数
Student(string name, int num, double score1, double score2, double score3) {
this->name = name;
this->num = num;
this->score1 = score1;
this->score2 = score2;
this->score3 = score3;
}
// 获取学生姓名
string getName() const {
return name;
}
// 获取学生学号
int getNum() const {
return num;
}
// 获取三门课程的成绩
double getScore1() const {
return score1;
}
double getScore2() const {
return score2;
}
double getScore3() const {
return score3;
}
private:
string name; // 学生姓名
int num; // 学生学号
double score1; // 第一门课程成绩
double score2; // 第二门课程成绩
double score3; // 第三门课程成绩
};
int main() {
int num; // 学生人数
cout << "请输入学生人数: ";
cin >> num;
// 动态创建学生对象数组
Student* classArr = new Student[num];
// 输入学生信息
for (int i = 0; i < num; i++) {
string name;
int num;
double score1, score2, score3;
cout << "请输入第" << i+1 << "个学生的姓名: ";
cin >> name;
cout << "请输入第" << i+1 << "个学生的学号: ";
cin >> num;
cout << "请输入第" << i+1 << "个学生的三门课程成绩: ";
cin >> score1 >> score2 >> score3;
// 创建学生对象并添加到对象数组中
Student s(name, num, score1, score2, score3);
classArr[i] = s;
}
// 计算每门课的平均成绩
double avgScore1 = 0, avgScore2 = 0, avgScore3 = 0;
for (int i = 0; i < num; i++) {
avgScore1 += classArr[i].getScore1();
avgScore2 += classArr[i].getScore2();
avgScore3 += classArr[i].getScore3();
}
avgScore1 /= num;
avgScore2 /= num;
avgScore3 /= num;
// 输出每门课的平均成绩
cout << "三门课程的平均成绩分别为: " << avgScore1 << ", " << avgScore2 << ", " << avgScore3 << endl;
// 释放动态分配的内存
delete[] classArr;
return 0;
}
```
在上述代码中,首先通过 `new` 关键字动态创建了一个大小为 `num` 的 `Student` 对象数组 `classArr`。然后通过 `for` 循环输入每个学生的信息,并创建学生对象并添加到对象数组中。最后再通过 `for` 循环计算每门课的平均成绩,并输出结果。最后使用 `delete` 关键字释放动态分配的内存,避免内存泄漏。
阅读全文