虚基类的应用-人与教师学生

编译器:C++ (g++)

派生类定义:根据所给的基类,完成多重继承下的派生类定义

函数接口定义:

输出样例:

在这里给出相应的输出。例如:

name:Wang-li

age:24

sex:f

score:89.5

title:assistant

wages:1234.5

#include  <iostream>
#include  <string>
using  namespace  std;
//定义公共基类Person
class  Person                                                            
{public:
    Person(string  nam,char  s,int  a)                            
      {name=nam;sex=s;age=a;}
  protected:                                                            
      string  name;
      char  sex;
      int  age;
};
//定义类Teacher
class  Teacher:virtual  public  Person                            
  {public:                                                                  
      Teacher(string  nam,char  s,int  a,string  t):Person(nam,s,a)              
        {title=t;  
        }
    protected:                                                                      
        string  title;                                                                
};
//定义类Student
class  Student:virtual  public  Person                              
  {public:
      Student(string  nam,char  s,int  a,float  sco):      
            Person(nam,s,a),score(sco){}                            
    protected:                                                                          
        float  score;                                                              
  };
  
  /*这里添加派生类的定义*/
int  main(  )
  {Graduate  grad1("Wang-li",'f',24,"assistant",89.5,1234.5);
    grad1.show(  );
    return  0;
}

Ans:

class Graduate:public Teacher,public Student
{
public:
    Graduate(string name, char sex, int age, string title, float score, float wage)
           : Person(name, sex, age), Teacher(name, sex, age, title)
           , Student(name, sex, age, score),wages(wage){};
    void show(){
        cout<<"name:"<<name<<endl;
        cout<<"age:"<<age<<endl;
        cout<<"sex:"<<sex<<endl;
        cout<<"score:"<<score<<endl;
        cout<<"title:"<<title<<endl;
        cout<<"wages:"<<wages<<endl;
    }
private:
    double wages;
};

 

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我来回答你的问题。 这是一个面向对象的编程问题,需要用到继承、虚函数、友元函数等知识点。 首先,我们定义一个基类Person,包含姓名、性别和年龄三个成员变量: ```c++ class Person { protected: string name; string gender; int age; public: Person(string name, string gender, int age) : name(name), gender(gender), age(age) {} virtual void printInfo() { cout << "姓名:" << name << endl; cout << "性别:" << gender << endl; cout << "年龄:" << age << endl; } }; ``` 然后,我们从Person类派生出Teacher类和Student类,并在Teacher类中增加工号、职称和工资三个成员变量,在Student类中增加学号、班级、专业和入学成绩四个成员变量: ```c++ class Teacher : public Person { private: int id; string title; double salary; public: Teacher(string name, string gender, int age, int id, string title, double salary) : Person(name, gender, age), id(id), title(title), salary(salary) {} virtual void printInfo() { Person::printInfo(); cout << "工号:" << id << endl; cout << "职称:" << title << endl; cout << "工资:" << salary << endl; } friend double averageSalary(Teacher* teachers, int n); }; class Student : public Person { private: string sid; string cls; string major; double score; public: Student(string name, string gender, int age, string sid, string cls, string major, double score) : Person(name, gender, age), sid(sid), cls(cls), major(major), score(score) {} virtual void printInfo() { Person::printInfo(); cout << "学号:" << sid << endl; cout << "班级:" << cls << endl; cout << "专业:" << major << endl; cout << "入学成绩:" << score << endl; } friend bool operator<(const Student& s1, const Student& s2); }; ``` 注意,我们在基类Person中定义了一个虚函数printInfo(),它被声明为virtual,表示它可以被子类重写。在Teacher类和Student类中,我们都重写了printInfo(),以便输出自己的成员变量。这就是多态的应用。 此外,我们在Teacher类中还定义了一个友元函数averageSalary(),用于计算教师的平均工资。在Student类中定义了一个友元函数operator<(),用于比较两个学生的入学成绩。 接下来,实现averageSalary()函数和operator<()函数: ```c++ double averageSalary(Teacher* teachers, int n) { double sum = 0; for (int i = 0; i < n; i++) { sum += teachers[i].salary; } return sum / n; } bool operator<(const Student& s1, const Student& s2) { return s1.score < s2.score; } ``` 最后,我们可以在主函数中创建若干个Teacher对象和Student对象,然后调用它们的printInfo()函数输出基本信息,计算教师的平均工资并输出,找出入学成绩最高的学生并输出。 完整代码如下:

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值