用C++实现学生教师类的菱形继承

前言

大半夜的又整了个活!
算是写的第二个C++代码,反正不是码农,随便写着玩玩,但无论怎样,用户体验第一,安全性第一!
好像不能兼得哦。反正安全性我也不太会,那就安全性第二吧。用户体验第一!

功能介绍

这个工程包括四个类,分别是人员类、学生类、教师类和学生教师混合类。
学生类和教师类虚继承人员类,混合类多继承学生类和教师类。
每个类包含各自的toString函数,拥有较完善的键入界面。
在这里插入图片描述

结果展示

使用界面
在这里插入图片描述
创建人员对象
在这里插入图片描述
创建混合对象并打印
在这里插入图片描述
好了,懒得展示了,直接嫖吧

代码区

人员类

#include<iostream>
#include<sstream>
using namespace std;

//人员类
class Person {
public:
	Person(string name, int age) :m_name(name), m_age(age) { }
	string toString() {
		string str = m_name + "'s age is ";
		str += std::to_string(m_age);
		str += ".\n";
		return str;
	}
private:
	int m_age;
	string m_name;
};

两个虚继承

//学生类
class Student : virtual public Person {
public:
	Student(int score, string name, int age) : m_score(score), Person(name, age) { }
	string toString(int key) {
		string str = "And his score is ";
		str += std::to_string(m_score);
		str += ".\n";
		return str;
	}
	string toString() {
		return Person::toString() + toString(1);
	}
private:
	int m_score;
};
//教师类
class Teacher : virtual public Person {
public:
	Teacher(int salary, string name, int age) : m_salary(salary), Person(name, age) { }
	string toString(int key) {
		string str = "And his salary is ";
		str += std::to_string(m_salary);
		str += ".\n";
		return str;
	}
	string toString() {
		return Person::toString() + toString(1);
	}
private:
	int m_salary;
};

一个多继承

//教师学生混合人员
class StuStaff : public Student, public Teacher {
public:
	StuStaff(int score, int salary, string name, int age)
		: Student(score, name, age), Teacher(salary, name, age), Person(name, age) { }
	string toString() {
		return Person::toString() + Student::toString(1) + Teacher::toString(1);
	}
};

交互菜单

//交互菜单
void makeMenu() {
	cout << "+----菱形继承模拟系统----+" << endl;
	cout << "|       0.退出系统       |" << endl;
	cout << "|  1.创建人员对象并打印  |" << endl;
	cout << "|  2.创建学生对象并打印  |" << endl;
	cout << "|  3.创建教师对象并打印  |" << endl;
	cout << "|  4.创建混合对象并打印  |" << endl;
	cout << "+------------------------+" << endl;
	cout << "请选择操作:";
}

按键交互

//按键交互
void keyDown() {
	int key;
	cin >> key;
	switch (key) {
	case(0):
		cout << "退出成功" << endl;
		exit(0);
		break;
	case(1): {
		cout << "请输入姓名和年龄:";
		string name;
		int age;
		cin >> name >> age;
		Person person(name, age);
		cout << person.toString();
		break;
	}
	case(2): {
		cout << "请输入姓名,年龄和分数:";
		string name;
		int age, score;
		cin >> name >> age >> score;
		Student student(score, name, age);
		cout << student.toString();
		break;
	}
	case(3): {
		cout << "请输入姓名,年龄和工资:";
		string name;
		int age, salary;
		cin >> name >> age >> salary;
		Teacher teacher(salary, name, age);
		cout << teacher.toString();
		break;
	}
	case(4): {
		cout << "请输入姓名,年龄,分数和工资:";
		string name;
		int age, score, salary;
		cin >> name >> age >> score >> salary;
		StuStaff stu(score, salary, name, age);
		cout << stu.toString();
		break;
	}
	default:
		break;
	}
}

主函数

int main() {
	
	while (1) {
		makeMenu();
		keyDown();
		system("pause");
		system("cls");
	}
	return 0;
}

整活结束!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

1ta-chi

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

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

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

打赏作者

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

抵扣说明:

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

余额充值