【期末不挂科-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.mzph.cn/news/619457.shtml

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

相关文章

2_单列模式_懒汉式单例模式

二.懒汉式单例模式 (1) 饿汉式单例模式概念 为了解决饿汉式单例可能带来的内存浪费问题&#xff0c;于是就出现了懒汉式单例的写法。懒汉式单例模式的特点是&#xff0c;单例对象要在被使用时才会初始化。 (2) 代码实现 实现代码方式1&#xff1a;简单的饿汉式单例 /*** 优…

解密威胁:.kat6.l6st6r 勒索病毒的威胁与恢复

导言&#xff1a; 在当今数字化时代&#xff0c;勒索病毒已经成为网络安全威胁中的一大巨头。其中&#xff0c;.kat6.l6st6r 勒索病毒以其狡猾的传播方式和高级的加密算法备受关注。本文将深入介绍.kat6.l6st6r 勒索病毒的特点、应对措施以及如何预防此类威胁。如果您在面对被…

基于java的 aws s3文件上传

aws s3 文件上传代码 首先&#xff0c;确保您已经在AWS上创建了一个S3存储桶&#xff0c;并拥有相应的访问密钥和密钥ID。这些凭据将用于在Java代码中进行身份验证。 接下来&#xff0c;需要在Java项目中添加AWS SDK的依赖。可以使用Maven或Gradle进行依赖管理。以下是一个Ma…

Kubernetes实战(十七)-设置kubernetes允许master调度pod

1 taint节点调度策略 NoSchedule: 一定不能被调度PreferNoSchedule: 尽量不要调度NoExecute: 不仅不会调度, 还会驱逐Node上已有的Pod 2 查看节点调度 $ kubectl describe node|grep -E "Name:|Taints:" Name: ops-master-1 Taints: no…

Kotlin 委托

Kotlin 委托 委托模式 是一种 通过 对象组合 实现代码重用 的设计模式&#xff0c; 对象处理请求时 将其 委托给 其他对象&#xff08;委托&#xff09;处理。 Kotlin 委托 分为&#xff1a; 类的委托属性的委托 一、类的委托 委托 Delegate 是实现继承的一种替代方式。达到了…

流量预测中文文献阅读(郭郭专用)

目录 基于流量预测的超密集网络资源分配策略研究_2023_高雪亮_内蒙古大学&#xff08;1&#xff09;内容总结&#xff08;2&#xff09;流量预测部分1、数据集2、结果对其中的一个网格的CDR进行预测RMSE和R2近邻数据和周期数据对RMSE的影响 &#xff08;3&#xff09;基于流量预…

ElasticSearch概述+SpringBoot 集成 ES

ES概述 开源的、高扩展的、分布式全文检索引擎【站内搜索】 解决问题 1.搜索词是一个整体时&#xff0c;不能拆分&#xff08;mysql整体连续&#xff09; 2.效率会低&#xff0c;不会用到索引&#xff08;mysql索引失效&#xff09; 解决方式 进行数据的存储&#xff08;只存储…

无缝打通易快报与电子签章系统,合同管理也能如此简单!

客户介绍&#xff1a; 某股份有限公司是一家专注于高端装备制造和智能制造解决方案的高新技术企业。该公司的产品和服务广泛应用于汽车、航空、高铁、智能家居、电子电器、新能源等领域&#xff0c;为全球客户提供了高效、精准、可靠的制造解决方案。 添加图片注释&#xff0c…

剑指offer面试题4 替换空格

考察点 考察数据结构字符串知识点 不同于c语言&#xff0c;java语言有字符和字符串俩种数据类型&#xff0c;char类型(字符类型)是基本数据类型&#xff0c;string类型(字符串类型)是引用类型 java语言中的字符采用unicode编码在内存中用2个字节存储&#xff0c;因此一个英文…

js中console.log()的使用方法

console.log()是JavaScript中的一个内置函数&#xff0c;用于在控制台输出信息&#xff1b;该方法对于开发过程进行测试很有帮助。可以输出之前在其中定义的任何类型的变量&#xff0c;或者只输出需要显示给用户的任何消息。 语法是&#xff1a; console。log&#xff08;&am…

HCIA-Datacom题库(自己整理分类的)_12_其他网络协议多选【12道题】

1.下面哪些是路由协议? BGP IPX OSPF IP 2.网络管理员使用Ping来测试网络的连通性&#xff0c;在这个过程中下面哪个协议可能会被使用到? UDP ICMP ARP TCP 解析&#xff1a;UDP、TCP是四层协议。 3.以下哪些是指网络通信? 使用即时通信软件(如:QQ、微信)与好友…

​iOS 应用上架指南:资料填写及提交审核

目录 摘要 引言 打开appuploader工具&#xff0c;第二步&#xff1a;打开appuploader工具 第五步&#xff1a;交付应用程序&#xff0c;在iTunes Connect中查看应用程序 总结 摘要 本文提供了iOS新站上架资料填写及提交审核的详细指南&#xff0c;包括创建应用、资料填写-…

【JAVA语言-第12话】API中的工具类 之 Date,DateFormat,SimpleDateFormat,Calendar类的详细解析

目录 日期和时间 1.1 Date类 1.1.1 概述 1.1.2 常用方法 1.1.3 案例 1.2 DateFormat类 1.2.1 概述 1.2.2 常用方法 1.3 SimpleDateFormat类 1.3.1 概述 1.3.2 构造方法 1.3.3 模式字符 1.3.4 日期转字符串 1.3.5 字符串转日期 1.4 Calendar类 1.4.1 概述 1…

软件工程宠物管理系统详细计划示例

1&#xff0e;引言 1.1编写目的 本详细设计说明书旨在为宠物管理系统的开发提供一个清晰、全面的指导&#xff0c;确保项目顺利进行。本说明书详细阐述了系统的功能、架构、模块划分以及技术选型等方面的内容&#xff0c;旨在为项目开发团队、项目管理人员和感兴趣的读者提供…

Raspbian安装摄像头

Raspbian安装摄像头 1. 源由2. 摄像头2.1 选型2.2 系统2.3 安装 3. 配置&命令3.1 命令3.2 配置 4. 测试4.1 拍照4.1.1 libcamera-jpeg4.1.2 libcamera-still 4.2 视频流4.2.1 RTSP流4.2.2 TCP流 5. 参考资料 1. 源由 家里闲置两块树莓派&#xff0c;打算做个WiFi视频流RTS…

python - fastapi 之 Denpends

Depends 描述 在 FastAPI 中&#xff0c;Depends 是一个用于处理依赖关系的工具。 Depends允许开发者定义一个可复用函数&#xff0c;此函数作为参数传递给路由处理函数。 from fastapi import Dependsuser_router.post("/test") def test_api(data: UserTestSche…

【JaveWeb教程】(21) MySQL数据库开发之多表设计:一对多、一对一、多对多的表关系 详细代码示例讲解

目录 2. 多表设计2.1 一对多2.1.1 表设计2.1.2 外键约束 2.2 一对一2.3 多对多2.4 案例 2. 多表设计 关于单表的操作(单表的设计、单表的增删改查)我们就已经学习完了。接下来我们就要来学习多表的操作&#xff0c;首先来学习多表的设计。 项目开发中&#xff0c;在进行数据库…

Csiszár divergences

Csiszr divergences 熵函数 熵函数&#xff08;entropy function) φ : R → R \varphi: \mathbb{R}_{} \to \mathbb{R}_{} φ:R​→R​&#xff0c;他是凸函数&#xff0c;正的&#xff08;&#xff1f;&#xff09;&#xff0c;下半连续函数&#xff0c;并且 φ ( 1 ) …

【算法题】45. 跳跃游戏 II

题目 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j < nums[i] i j < n 返回到达 nums[n - …

MISGAN

MISGAN:通过生成对抗网络从不完整数据中学习 代码、论文、会议发表: ICLR 2019 摘要: 生成对抗网络(GAN)已被证明提供了一种对复杂分布进行建模的有效方法,并在各种具有挑战性的任务上取得了令人印象深刻的结果。然而,典型的 GAN 需要在训练期间充分观察数据。在本文中…