定义学生类,有姓名,学号,性别,年龄等私有成员变量,有构造和析构函数,有打印信息的成员函数。 要求通过构造函数可以给属性赋予初始值。 定义大学生类,继承自学生类,大学生有专业名、成绩的私有成员变量,还有是否获得奖学金的成员函数(成绩为判断依据)。隐藏基类打印信息的成员函数,新的打印信息的成员函数也要能打印姓名、学号、性别、年龄信息。 要求通过构造函数可以给属性赋予初始值。 再定义研究生类,继承自大学生类,有导师姓名和工资的私有成员变量,有打印工资这个成员函数。 要求通过构造函数可以给属性赋予初始值
时间: 2024-04-08 18:31:16 浏览: 12
下面是C++语言的实现:
```cpp
#include <iostream>
#include <string>
using namespace std;
class Student {
private:
string name;
string studentId;
string gender;
int age;
public:
Student(string n, string id, string g, int a) : name(n), studentId(id), gender(g), age(a) {}
void printInfo() {
cout << "姓名:" << name << endl;
cout << "学号:" << studentId << endl;
cout << "性别:" << gender << endl;
cout << "年龄:" << age << endl;
}
};
class CollegeStudent : public Student {
private:
string major;
int score;
public:
CollegeStudent(string n, string id, string g, int a, string m, int s) : Student(n, id, g, a), major(m), score(s) {}
bool hasScholarship() {
return score >= 90; // 成绩大于等于90分才能获得奖学金
}
void printInfo() {
Student::printInfo();
cout << "专业:" << major << endl;
cout << "成绩:" << score << endl;
}
};
class GraduateStudent : public CollegeStudent {
private:
string advisorName;
int salary;
public:
GraduateStudent(string n, string id, string g, int a, string m, int s, string adv, int sal) : CollegeStudent(n, id, g, a, m, s), advisorName(adv), salary(sal) {}
void printSalary() {
cout << "工资:" << salary << endl;
}
};
int main() {
// 创建学生对象并打印信息
Student student("张三", "2021001", "男", 20);
student.printInfo();
cout << endl;
// 创建大学生对象并打印信息
CollegeStudent collegeStudent("李四", "2022001", "女", 22, "计算机科学与技术", 85);
collegeStudent.printInfo();
cout << "是否获得奖学金:" << (collegeStudent.hasScholarship() ? "是" : "否") << endl;
cout << endl;
// 创建研究生对象并打印信息
GraduateStudent graduateStudent("王五", "2023001", "男", 24, "软件工程", 95, "张老师", 5000);
graduateStudent.printInfo();
graduateStudent.printSalary();
return 0;
}
```
这段代码定义了一个基类`Student`,以及两个派生类`CollegeStudent`和`GraduateStudent`,分别实现了学生类、大学生类和研究生类的功能。每个类都有构造函数来初始化属性,以及打印信息的成员函数来输出相关信息。派生类可以继承基类的属性和成员函数,并在此基础上扩展新的属性和功能。
请注意,对于隐藏基类的成员函数`printInfo()`,在派生类中重新定义了具有相同名称的函数,以实现特定的功能。通过使用作用域解析运算符`::`,我们可以在派生类的成员函数中调用基类的相应成员函数。