【期末不挂科-C++考前速过系列P4】大二C++实验作业-继承和派生(3道代码题)【解析,注释】

前言

大家好吖,欢迎来到 YY 滴C++考前速过系列 ,热烈欢迎! 本章主要内容面向接触过C++的老铁
主要内容含:
在这里插入图片描述

欢迎订阅 YY滴C++专栏!更多干货持续更新!以下是传送门!

  • YY的《C++》专栏
  • YY的《C++11》专栏
  • YY的《Linux》专栏
  • YY的《数据结构》专栏
  • YY的《C语言基础》专栏
  • YY的《初学者易错点》专栏
  • YY的《小小知识点》专栏
  • YY的《单片机期末速过》专栏
  • YY的《C++期末速过》专栏

目录

  • 程序1:
  • 程序2:
  • 程序3:

程序1:

设计以下三个类:显卡类、主板类、集成了显卡的集成主板类。
对这三个类的描述如下:

  • 显卡类:CPU频率、显存频率。
  • 主板类:北桥芯片类型、版型。
  • 集成主板类:CPU频率、显存频率、北桥芯片类型、版型。
    每个类都有自己的构造函数和析构函数,构造函数通过给定的初始值生成对应类的对象。同时这三个类都能显示其数据成员的值。
    要求:通过类的多继承完成集成主板类的设计。
#include <iostream>
using namespace std;// 显卡类
class GraphicsCard {
public:int cpuFrequency;int memoryFrequency;GraphicsCard(int cpu, int memory) : cpuFrequency(cpu), memoryFrequency(memory) {cout << "GraphicsCard constructed" << endl;}~GraphicsCard() {cout << "GraphicsCard destructed" << endl;}void display() {cout << "CPU Frequency: " << cpuFrequency << " MHz" << endl;cout << "Memory Frequency: " << memoryFrequency << " MHz" << endl;}
};// 主板类
class Motherboard {
public:string chipsetType;string formFactor;Motherboard(string chipset, string form) : chipsetType(chipset), formFactor(form) {cout << "Motherboard constructed" << endl;}~Motherboard() {cout << "Motherboard destructed" << endl;}void display() {cout << "Chipset Type: " << chipsetType << endl;cout << "Form Factor: " << formFactor << endl;}
};// 集成主板类
class IntegratedMotherboard : public GraphicsCard, public Motherboard {
public:IntegratedMotherboard(int cpu, int memory, string chipset, string form): GraphicsCard(cpu, memory), Motherboard(chipset, form) {cout << "IntegratedMotherboard constructed" << endl;}~IntegratedMotherboard() {cout << "IntegratedMotherboard destructed" << endl;}void display() {GraphicsCard::display();Motherboard::display();}
};int main() {IntegratedMotherboard mb(3000, 1600, "Intel", "ATX");mb.display();return 0;
}

程序2:

程序2.开发一个简单的大学人员管理程序。该程序可以管理大学的一些基本人员信息:学生(student)和教师(teacher)。

  • 首先设计一个虚基类person,通过该类描述人员的基本信息:姓名(name)、年龄(age)和性别(sex)。
  • 然后使用该类派生出学生类student和教师类teacher,在其中添加各自的特性。例如,在student类中添加专业(specialty),在teacher类中添加院系(department)等。
  • 还有部分教师在工作的同时,在职攻读学位,因此具有教师和学生双重身份,由student类和teacher类再次派生出stuTeacher类。
    为每个类定义一个输出函数print,输出该类的相关信息。
#include <iostream>
#include <string>
using namespace std;// 虚基类 person
class Person {
public:string name;int age;char sex;Person(string n, int a, char s) : name(n), age(a), sex(s) {}virtual void print() {cout << "Name: " << name << endl;cout << "Age: " << age << endl;cout << "Sex: " << sex << endl;}
};// 学生类 student
class Student : public Person {
public:string specialty;Student(string n, int a, char s, string sp) : Person(n, a, s), specialty(sp) {}void print() override {Person::print();cout << "Specialty: " << specialty << endl;}
};// 教师类 teacher
class Teacher : public Person {
public:string department;Teacher(string n, int a, char s, string dep) : Person(n, a, s), department(dep) {}void print() override {Person::print();cout << "Department: " << department << endl;}
};// 具有教师和学生双重身份的类 stuTeacher
class StuTeacher : public Student, public Teacher {
public:StuTeacher(string n, int a, char s, string sp, string dep) : Student(n, a, s, sp), Teacher(n, a, s, dep) {}void print() override {Student::print();Teacher::print();}
};int main() {Student s("Alice", 20, 'F', "Computer Science");Teacher t("Bob", 35, 'M', "Mathematics");StuTeacher st("Carol", 25, 'F', "Physics", "Engineering");cout << "Student Information:" << endl;s.print();cout << "\nTeacher Information:" << endl;t.print();cout << "\nStudent-Teacher Information:" << endl;st.print();return 0;
}

程序3:

程序3.某学校教学管理人员分工如下:教师负责讲授各类课程;班主任负责管理班级;兼职班主任既讲授课程又担任班级的管理工作。对他们的描述如下:

  • 教师:员工编号、姓名、职称、基本工资、每个月的授课量。 班主任:员工编号、姓名、职称、基本工资、管理的班级数量。
  • 兼职班主任:员工编号、姓名、职称、基本工资、每个月的授课量、管理的班级数量。
    所有教学管理人员都有输出自己基本信息的功能,包括:员工编号、姓名、职称、每个月的授课量、管理的班级数量。
    所有的教学管理人员都有计算自己工资的功能。其中, 教师的工资=基本工资+每个月的授课量*20;
  • 班主任的工资=基本工资+管理的班级数量300; 兼职班主任的工资=基本工资+每个月的授课量20+管理班级的数量*300。
    要求:现在学校要开发教学管理软件来处理学校日常工作,请用多继承方式定义描述以上3类教学管理人员的类。
#include <iostream>
#include <string>
using namespace std;// 基类:教学管理人员
class TeachingStaff {
public:int employeeID;string name;string title;double baseSalary;TeachingStaff(int id, string n, string t, double salary): employeeID(id), name(n), title(t), baseSalary(salary) {}virtual void printInfo() {cout << "Employee ID: " << employeeID << endl;cout << "Name: " << name << endl;cout << "Title: " << title << endl;}virtual double calculateSalary() = 0;
};// 教师类
class Teacher : public TeachingStaff {
public:int teachingHoursPerMonth;Teacher(int id, string n, string t, double salary, int hours): TeachingStaff(id, n, t, salary), teachingHoursPerMonth(hours) {}void printInfo() override {TeachingStaff::printInfo();cout << "Teaching Hours Per Month: " << teachingHoursPerMonth << endl;}double calculateSalary() override {return baseSalary + teachingHoursPerMonth * 20;}
};// 班主任类
class Headmaster : public TeachingStaff {
public:int numberOfClassesManaged;Headmaster(int id, string n, string t, double salary, int classes): TeachingStaff(id, n, t, salary), numberOfClassesManaged(classes) {}void printInfo() override {TeachingStaff::printInfo();cout << "Number of Classes Managed: " << numberOfClassesManaged << endl;}double calculateSalary() override {return baseSalary + numberOfClassesManaged * 300;}
};// 兼职班主任类
class PartTimeHeadmaster : public Teacher, public Headmaster {
public:PartTimeHeadmaster(int id, string n, string t, double salary, int hours, int classes): Teacher(id, n, t, salary, hours), Headmaster(id, n, t, salary, classes) {}void printInfo() override {Teacher::printInfo();Headmaster::printInfo();}double calculateSalary() override {return baseSalary + teachingHoursPerMonth * 20 + numberOfClassesManaged * 300;}
};int main() {Teacher t(1001, "John", "Professor", 5000, 40);Headmaster h(2001, "Alice", "Headmaster", 6000, 3);PartTimeHeadmaster p(3001, "Bob", "Associate Professor", 4000, 30, 2);cout << "Teacher Information:" << endl;t.printInfo();cout << "Salary: $" << t.calculateSalary() << endl;cout << "\nHeadmaster Information:" << endl;h.printInfo();cout << "Salary: $" << h.calculateSalary() << endl;cout << "\nPart-Time Headmaster Information:" << endl;p.printInfo();cout << "Salary: $" << p.calculateSalary() << endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/416180.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

飞书修改不了名称?飞书如何修改名称,修改昵称

飞书如何修改名称 点击编辑信息 在这里修改姓名就可以啦

uniapp 微信小程序 内嵌H5网页办法

uniapp 微信小程序 内嵌H5网页办法 如图所示 1.新建webView页面 <template><web-view v-ifhttpUrl :srchttpUrl></web-view> </template><script>export default {data() {return {httpUrl: "",};},onLoad(options) {options.http…

PHP+MySQL组合开发:微信小程序万能建站源码系统 附带完整的搭建教程

随着移动互联网的快速发展&#xff0c;微信小程序已成为企业进行移动营销的重要工具。然而&#xff0c;对于许多中小企业和个人开发者来说&#xff0c;开发一个功能完善、用户体验良好的小程序是一项复杂的任务。罗峰给大家分享一款微信小程序万能建站源码系统。该系统采用PHPM…

pycharm配置远程开发环境原则与具体步骤

pycharm配置远程环境与映射路径基本原则和具体步骤。 pycharm远程环境基本就是两个事。 远程同步远程解释器 目的是为了解决一下这种麻烦的操作&#xff1a;将本地代码上传到服务器之后&#xff0c;用远程服务器的解释器运行服务器上的代码。 远程同步-一键上传到服务器远程解释…

计算用3种颜色为6个格子着色的所有可能方法

“有六个条幅&#xff08;等宽&#xff09;&#xff0c;每个着以红色、白色或蓝色&#xff0c;把这些条幅连成一面长条旗&#xff0c;这种旗子有多少种&#xff1f;”* 1 1 1 1 1 2 2 1 1 1 1 1 如果旗子的颜色镜像对称视为同一种 按照“&#xff08;伯恩赛德引理…

【算法Hot100系列】字母异位词分组

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

vue:菜单栏联动内容页面tab

一、需求 需要实现效果&#xff1a;左侧菜单栏与右侧内容部分联动&#xff0c;当点击左侧的菜单&#xff0c;右侧会展示对应的tab&#xff0c;没有点击时&#xff0c;不展示&#xff08;如刚进入页面没有点击菜单&#xff0c;则没有tab&#xff09;&#xff1b;点击后没有关闭…

HarmonyOS—创建和运行Hello World

DevEco Studio配置开发环境完成后&#xff0c;可以通过运行Hello World工程来验证环境设置是否正确。接下来以创建一个Phone设备的工程为例进行介绍。 创建一个新工程 打开DevEco Studio&#xff0c;在欢迎页单击Create Project&#xff0c;创建一个新工程。根据工程创建向导&…

广东金牌电缆:法大大电子合同助力业务风险管控

广东金牌电缆集团股份有限公司&#xff08;以下简称“广东金牌电缆”&#xff09;成立于2013年&#xff0c;现为广东省电线电缆重点生产企业、广东省守合同重信用单位、国家专精特新小巨人企业、国家高新技术企业&#xff0c;拥有自主商标“夺冠”&#xff0c;“夺冠”商标被评…

hash应用

目录 一、位图 1.1、引出位图 1.2、位图的概念 1.3、位图的应用 1.4、位图模拟实现 二、布隆过滤器 2.1、什么是布隆过滤器 2.2、布隆过滤器应用的场景 2.3、布隆过滤器的原理 2.4、布隆过滤器的查找 2.5、布隆过滤器的插入 2.6、布隆过滤器的删除 2.7、布隆过滤器…

什么是比特币?

比特币 比特币 &#xff08;英语&#xff1a;Bitcoin&#xff0c;缩写&#xff1a;BTC &#xff09;是一种基于 去中心化&#xff0c;采用 点对点网络&#xff0c;开放源代码&#xff0c;以 区块链 作为底层技术的 加密货币。比特币由 中本聪&#xff08;Satoshi Nakamoto&…

K8S Informer机制原理解读 | 架构设计

在Kubernetes系统中&#xff0c;组件之间通过HTTP协议进行通信&#xff0c;在不依赖任何中间件的情况下需要保证消息的实时性、可靠性、顺序性等。那么Kubernetes是如何做到的呢&#xff1f;答案就是Informer机制。Kubernetes的其他组件都是通过client-go的Informer机制与Kuber…