C++:设计一个虚基类Person

设计一个虚基类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;
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

淬炼之火

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值