设计一个虚基类Person,派生出父亲类Father、母亲类Mother,间接派生出孩子类Child;其主要数据包括姓、名、年龄,性别,孩子用父亲的姓;要求如下:

  1. 重载构造函数初始化数据成员;
  2. 公有成员函数void SetData([形参列表]);//实现数据成员赋值;
  3. 分别输出数据成员void Display( );
  4. 设计一个Person对象指针数组,完成初始化;
  5. 并按照年龄从大到小排序输出,形式如下:

姓名

年龄

性别

父亲

母亲

王军

49

不详

不详

李丽

47

不详

不详

张语

35

不详

不详

刘美

32

不详

不详

王仪

17

王军

李丽

张芊

5

张语

刘美

VS2019环境

#include<iostream>
using namespace std;
class Person {
protected:string sex=" ";int age;string firstname;string lastname;string father;string mother;
public:Person() {age = 0;firstname = " ";lastname = " ";father = "不详";mother = "不详";};void SetData(string Sex,int Age,string Firstname,string Lastname);void Display();int Getage() {return age;}
};
void Person::SetData(string Sex, int Age, string Firstname, string Lastname) {sex = Sex;age = Age;firstname = Firstname;lastname = Lastname;
}
void Person::Display() {cout << "姓名:" << firstname << lastname << "    " << "年龄:" << age << "    " << "性别:" << sex << "    " << "父亲:" << father << "    " << "母亲:" << mother << endl;
}class Father :public virtual Person {public:Father() :Person() { sex = "男"; }void SetData(int Age, string Firstname, string Lastname) {age = Age;firstname = Firstname;lastname = Lastname;}string Getfirstname() {return firstname;}string Getlastname() {return lastname;}};class Mother :public virtual Person {public:Mother() :Person() { sex = "女"; }void SetData(int Age, string Firstname, string Lastname) {age = Age;firstname = Firstname;lastname = Lastname;}string Getfirstname() {return firstname;}string Getlastname() {return lastname;}};class Child :public Father, public Mother {public:Child():Person() {}void SetData(int Age, string Sex, string Lastname,Father &man,Mother &woman) {firstname = man.Getfirstname();age = Age;sex = Sex;lastname = Lastname;father = man.Getfirstname()+man.Getlastname();mother= woman.Getfirstname()+woman.Getlastname();}
};int main() {Person* p;p = new Person[6];Father f1, f2;Mother m1, m2 ;Child c1, c2;/*也可以对三种派生类进行for循环输入,只需创建动态数组即可*/f1.SetData(49, "王","军");f2.SetData(35, "张", "语");m1.SetData(47, "李", "丽");m2.SetData(32, "刘", "美");c1.SetData(17, "女", "仪", f1, m1);c2.SetData(5, "女", "芊",f2, m2);//p = &f1;p[0]=f1; p[1] = f2; p[2] = m1; p[3] = m2; p[4] = c1; p[5] = c2;for (int i = 0; i < 6; i++) {for (int j = 0; j < 5; j++) {if (p[j].Getage() < p[j + 1].Getage()) {Person q;q = p[j];p[j] = p[j + 1];p[j + 1] = q;}}}for (int i = 0; i < 6; i++) {p[i].Display();}return 0;
}

C++:设计一个虚基类Person相关推荐

  1. C++虚继承和虚基类详解(二)

    虚继承(Virtual Inheritance) 为了解决多继承时的命名冲突和冗余数据问题,C++ 提出了虚继承,使得在派生类中只保留一份间接基类的成员. 在继承方式前面加上 virtual 关键字就 ...

  2. 【选择恐惧症】接口?虚基类?

    [选择恐惧症]接口?虚基类? 症前兆 症分析 症解答 症总结 症前兆 记得有个朋友跟我讨论过这样的一个问题,说到他刚刚学习接口和虚基类的相关知识时觉得很迷茫,不知道什么时候该用接口,什么时候该使用虚基 ...

  3. C++虚继承和虚基类;虚函数与继承

    ref http://blog.csdn.net/owen7500/article/details/52432970?locationNum=4&fps=1 http://blog.csdn. ...

  4. C++虚继承和虚基类

    多继承(Multiple Inheritance)是指从多个直接基类中产生派生类的能力,多继承的派生类继承了所有父类的成员.尽管概念上非常简单,但是多个基类的相互交织可能会带来错综复杂的设计问题,命名 ...

  5. C++中的虚继承与虚基类

    1.Cpp中的虚继承与虚基类 在多继承时,很容易产生命名冲突的问题,即使我们很小心地将所有类中的成员变量和成员函数都命名为不同的名字,命名冲突依然有可能发生,比如典型的是菱形继承,如下图所示: 类A派 ...

  6. 详解虚函数的实现过程之虚基类(4)

    博客虚函数实现过程3 时提到过虚基类,这里呢,我们来详细讲述一下: 当我们在虚函数的声明结尾处添加"=0",这种虚函数就被称为纯虚函数. 它好似一个没有实现只有声明的函数,它的存在 ...

  7. 虚函数,虚基类 与纯虚函数 二

    虚函数    还是先看代码 class A { public:     void funPrint(){cout<<"funPrint of class A"<& ...

  8. 虚函数,虚基类 与纯虚函数 一

    正文 虚基类    在说明其作用前先看一段代码 class A { public:     int iValue; }; class B:public A { public:     void bPr ...

  9. C++ - 虚基类、虚函数与纯虚函数

    虚基类        在说明其作用前先看一段代码 class A { public:    int iValue; }; class B:public A { public:    void bPri ...

最新文章

  1. 2022-2028年中国工业节能行业深度调研及投资前景预测报告
  2. iOS 使用钥匙串将用户密码存入本地
  3. hdu1285 拓扑序
  4. asp.net 中的错误处理
  5. 《A Berkeley View of systems challenges for AI》总结
  6. [Vue warn]: Attribute id is ignored on component div because the component is a fragment instanc
  7. HDU 4675 GCD of Sequence(莫比乌斯反演 + 打表注意事项)题解
  8. PHP undefined index的几种解决方法
  9. 关于微星主板安装ubuntu16.04系统连不上网。ifconfig-a 只显示 lo的
  10. Ubuntu系统下载
  11. 怎样避免每次运行都启用宏的麻烦
  12. NOIP2018:The First Step
  13. 研究:信仰能帮助人坦然面对挫折
  14. ChaosBlade:混沌工程简介(一)
  15. Java集成PayPal支付
  16. 装的机械硬盘计算机里没有反应,固态硬盘和机械硬盘运行打开我的计算机图标,有时候读取没有响应,单独用固态硬盘是没问题的 ,机械硬盘也测试了,没有坏道什么的,始终找不到原因...
  17. 负数在计算机中是如何表示的
  18. Unity 物体沿着某个轴在一定范围内来回旋转
  19. 那些你不知道的TCP冷门知识!
  20. Kubernetes Pod 冗余策略

热门文章

  1. BNF语音识别文件格式简介
  2. static变量与全局变量
  3. 2019年1月21日训练
  4. 牛客JS40_判断是否包含数字(indexOf / 正则表达式)
  5. 带娃出门的必备好物推荐——HBR虎贝尔轻便推车
  6. 动态正则化权重系数_权重衰减防止过拟合(L2正则化)
  7. 显著性水平对应的临界值_什么是临界值?
  8. CreateMutex WaitForSingleObject ReleaseMutex使用
  9. 【华为OD机试 2023】 最差产品奖(C++ Java JavaScript Python 100%)
  10. 腾讯云服务器标准型s2/sa1/sa2区别在哪?如何选择?