不乖头打歪.855 2022-06-16 16:20 采纳率: 100%
浏览 31
已结题

对于多态实在有点不懂希望有人能帮我看看这个代码

最后的图是我想要输出的结果

#include<string>
using namespace std;
//多重继承
//二义性产生
//解决二义性问题

//虚基类 继承间接的基类person,
//把teacher与student公共的属性放到person中
//class person就是虚基类

//虚基类定义
class Person
{
public:
    Person(string nam, int a, string s)
        :name(nam), age(a), sex(s)
    {
        cout << "Person..." << endl;
    }
    ~Person() { cout << "~~~Person..." << endl; }

    //受保护的数据成员,便于子类直接访问
protected:
    string name; int age; string sex;
};


class Teacher :virtual public  Person
{
public:
    Teacher(string nam_t, int a, string se, string t)
        :Person(nam_t, a, se), title(t) {}
    void display()
    {
        cout << "\n输出一个教师信息..\n";
        cout << "name:" << name << "      "
            << "age:" << age << "      "
            << "sex:" << sex << "      "
            << "职称:" << title << endl;
    }
protected:
    string title;//教师职称
};
//第二个基类学生
class Student :virtual public Person
{
public:
    Student(string nam_s, int a, string se, float sco)
        :Person(nam_s, a, se), score(sco) {}
    void display()
    {
        cout << "\n输出一个学生信息..\n";
        cout << "name:" << name << "      "
            << "age:" << age << "      "
            << "sex:" << sex << "      "
            << "成绩:" << score << endl;
    }
protected:
    float score;
};
//子类研究生多重继承
class Graduate : public Teacher, public Student
{
public:
    Graduate(string nam, int a, string s, string t, float sco, float w)
        :Person(nam, a, s), Teacher(nam, a, s, t), Student(nam, a, s, sco), wage(w) {}
    void display()
    {
        cout << "\n输出一个研究生信息..\n";
        cout << "name\t" << " age  " << " Sex  "<< " Title " << " Score " << " Wage " << endl;

        cout << name << "\t";
        cout << age << "      ";
        cout << sex << "    ";
        cout << title << "    ";
        cout << score << "    ";
        cout << wage << endl;
    }
protected:
    float wage;
};
void main()
{
    Teacher t1("孔子", 48, "F", "Prof");
    Student s1("子张-学生", 20, "M", 98);
    Graduate g1("颜回-高足", 18, "F", "Assi", 85.2, 8900);
    Person*p;
    p = &t1; p->display();
    p = &s1;p->display();
    p = &g1;p->display();
}

img

  • 写回答

1条回答 默认 最新

  • 快乐鹦鹉 2022-06-16 16:35
    关注

    你现在实际输出是什么样子呢
    在person类中增加display虚函数
    virtual void display() = 0;

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 6月28日
  • 已采纳回答 6月20日
  • 创建了问题 6月16日

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘