定义一个基类本科学生Student类,有学号number和英语成绩english,计算机成绩computer、平均成绩average四个数据成员。定义一个构造函数、一个可计算平均成绩的函数Getaverge, 一个可显示其学号和平均成绩的函数Show。由Student类派生出研究生Graduate类,Graduate类有一个新数据成员teachAdviser(导师),定义一个构造函数与一个拷贝构造函数,改写Show函数。在Graduate类定义一个静态成员用于统计Graduate人数,定义一个静态成员函数ShowcountG用于显示研究生人数。在main函数中使用Student类和Graduate类。
时间: 2024-02-12 08:03:41 浏览: 152
好的,下面是代码实现:
```c++
#include <iostream>
#include <string>
using namespace std;
class Student {
protected:
string number;
double english;
double computer;
double average;
public:
Student(string n, double e, double c): number(n), english(e), computer(c) {}
void Getaverage() {
average = (english + computer) / 2;
}
void Show() {
cout << "学号:" << number << " 平均成绩:" << average << endl;
}
};
class Graduate : public Student {
private:
string teachAdviser;
static int countG; // 研究生人数
public:
Graduate(string n, double e, double c, string t) : Student(n, e, c), teachAdviser(t) {
countG++;
}
Graduate(const Graduate& g) : Student(g), teachAdviser(g.teachAdviser) {
countG++;
}
static void ShowcountG() {
cout << "研究生人数:" << countG << endl;
}
void Show() {
cout << "学号:" << number << " 平均成绩:" << average << " 导师:" << teachAdviser << endl;
}
};
int Graduate::countG = 0;
int main() {
Student s("1001", 80, 90);
s.Getaverage();
s.Show();
Graduate g1("2001", 85, 95, "张三");
g1.Getaverage();
g1.Show();
Graduate g2 = g1; // 测试拷贝构造函数
g2.Show();
Graduate::ShowcountG(); // 显示研究生人数
return 0;
}
```
输出结果为:
```
学号:1001 平均成绩:85
学号:2001 平均成绩:90 导师:张三
学号:2001 平均成绩:90 导师:张三
研究生人数:2
```
首先定义了一个基类 `Student`,拥有学号、英语成绩、计算机成绩和平均成绩四个数据成员,以及构造函数、计算平均成绩的函数 `Getaverage` 和显示学号和平均成绩的函数 `Show`。
然后从 `Student` 派生出一个研究生类 `Graduate`,增加了一个新的数据成员 `teachAdviser`(导师),以及一个静态成员 `countG`(研究生人数)。在构造函数中使用 `Student` 的构造函数初始化基类的数据成员,同时增加研究生人数。
重写了 `Show` 函数,显示学号、平均成绩和导师名字。
最后在 `main` 函数中,分别创建了一个学生和两个研究生对象,并测试了拷贝构造函数和静态成员函数 `ShowcountG`,输出了研究生人数。
阅读全文