定义一个基类有姓名、性别、年龄,再由基类派生出教师类和学生类。教师类增加工号、职称和工资,学生类增加学号、班级、专业和入学成绩。 编程要求: 1、设计虚函数输出教师和学生的基本信息; 2、计算教师的平均工资并输出; 3、使用友元函数重载运算符“<”,找出入学成绩最高的学生并输出;
时间: 2024-01-25 08:03:32 浏览: 100
C++ 实验六 继承与派生编程
好的,我来解答您的问题。
首先,我们可以定义一个基类Person,包含姓名、性别和年龄属性,并且声明一个虚函数printInfo()用于输出信息。代码如下:
```c++
class Person{
protected:
string name; //姓名
string gender; //性别
int age; //年龄
public:
Person(string n="", string g="", int a=0):name(n), gender(g), age(a){}
virtual void printInfo(){
cout<<"姓名:"<<name<<",性别:"<<gender<<",年龄:"<<age<<endl;
}
};
```
接着,我们可以由基类Person派生出教师类Teacher和学生类Student,并在派生类中增加相应的属性。教师类增加工号、职称和工资,学生类增加学号、班级、专业和入学成绩。代码如下:
```c++
class Teacher: public Person{
private:
string jobNumber; //工号
string title; //职称
double salary; //工资
public:
Teacher(string n="", string g="", int a=0, string jn="", string t="", double s=0):
Person(n,g,a), jobNumber(jn), title(t), salary(s){}
virtual void printInfo(){
cout<<"姓名:"<<name<<",性别:"<<gender<<",年龄:"<<age<<",工号:"<<jobNumber<<",职称:"<<title<<",工资:"<<salary<<endl;
}
double getSalary(){return salary;} //获取工资
};
class Student: public Person{
private:
string studentNumber; //学号
string className; //班级
string major; //专业
double entranceScore; //入学成绩
public:
Student(string n="", string g="", int a=0, string sn="", string cn="", string m="", double es=0):
Person(n,g,a), studentNumber(sn), className(cn), major(m), entranceScore(es){}
virtual void printInfo(){
cout<<"姓名:"<<name<<",性别:"<<gender<<",年龄:"<<age<<",学号:"<<studentNumber<<",班级:"<<className<<",专业:"<<major<<",入学成绩:"<<entranceScore<<endl;
}
friend bool operator<(const Student& s1, const Student& s2); //重载运算符"<"
double getEntranceScore(){return entranceScore;} //获取入学成绩
};
```
接着,我们需要计算教师的平均工资并输出。我们可以定义一个函数avgSalary(),其中使用了动态绑定,通过指向基类的指针调用派生类的成员函数getSalary()。代码如下:
```c++
void avgSalary(Teacher* t[], int n){
double sum = 0;
for(int i=0; i<n; i++){
sum += t[i]->getSalary();
}
cout<<"教师平均工资为:"<<sum/n<<endl;
}
```
最后,我们需要使用友元函数重载运算符“<”,找出入学成绩最高的学生并输出。代码如下:
```c++
bool operator<(const Student& s1, const Student& s2){
return s1.entranceScore < s2.entranceScore;
}
void findMaxEntranceScore(Student* s[], int n){
Student* maxScoreStudent = s[0];
for(int i=1; i<n; i++){
if(*s[i] < *maxScoreStudent){
maxScoreStudent = s[i];
}
}
cout<<"入学成绩最高的学生是:"<<endl;
maxScoreStudent->printInfo();
}
```
完整代码如下:
阅读全文