定义一个基类本科学生Student类,有学号number和英语成绩english,计算机成绩computer、平均成绩average四个数据成员。定义一个构造函数、一个可计算平均成绩的函数Getaverge, 一个可显示其学号和平均成绩的函数Show。由Student类派生出研究生Graduate类,Graduate类有一个新数据成员teachAdviser(导师),定义一个构造函数与一个拷贝构造函数,改写Show函数。在Graduate类定义一个静态成员用于统计Graduate人数,定义一个静态成员函数ShowcountG用于显示研究生人数。在main函数中使用Student类和Graduate类。
时间: 2024-02-12 22:03:33 浏览: 14
好的,以下是代码实现:
```cpp
#include <iostream>
using namespace std;
class Student {
protected:
int number;
float english, computer, average;
public:
Student(int n, float e, float 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(int n, float e, float c, string a) : Student(n, e, c), teachAdviser(a) { countG++; }
Graduate(Graduate& g) : Student(g.number, g.english, g.computer), 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, 90, 85);
s.Getaverage();
s.Show();
Graduate g1(2001, 95, 92, "张三");
g1.Getaverage();
g1.Show();
Graduate g2 = g1;
g2.Show();
Graduate::ShowcountG();
return 0;
}
```
程序输出:
```
学号:1001,平均成绩:87.5
学号:2001,平均成绩:93.5,导师:张三
学号:2001,平均成绩:93.5,导师:张三
研究生人数:2
```
解释:
首先定义了一个基类 `Student`,有学号、英语成绩、计算机成绩和平均成绩四个数据成员,分别对应 `number`、`english`、`computer` 和 `average`。构造函数接收三个参数,分别是学号、英语成绩和计算机成绩。`Getaverage` 函数用于计算平均成绩,`Show` 函数用于显示学号和平均成绩。
接着定义了一个派生类 `Graduate`,继承自 `Student`。新增了一个数据成员 `teachAdviser`,代表导师。构造函数接收四个参数,分别是学号、英语成绩、计算机成绩和导师名字。拷贝构造函数接收一个 `Graduate` 类型的引用,用于实现拷贝构造。静态成员变量 `countG` 用于统计 `Graduate` 类的对象个数,静态成员函数 `ShowcountG` 用于显示 `Graduate` 类的对象个数。`Show` 函数重写了基类的 `Show` 函数,增加了导师名字的输出。
在 `main` 函数中,首先创建一个 `Student` 类型的对象 `s`,并调用其 `Getaverage` 和 `Show` 函数输出学号和平均成绩。然后创建两个 `Graduate` 类型的对象 `g1` 和 `g2`,并调用其 `Getaverage` 和 `Show` 函数输出学号、平均成绩和导师名字。接着使用 `g1` 的拷贝构造函数创建一个新的 `Graduate` 类型的对象 `g2`,并调用其 `Show` 函数输出学号、平均成绩和导师名字。最后调用 `Graduate` 类的静态成员函数 `ShowcountG`,输出 `Graduate` 类的对象个数。