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

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

前言

大家好吖,欢迎来到 YY 滴C++考前速过系列 ,热烈欢迎! 本章主要内容面向接触过C++的老铁

主要内容含:

]



程序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;
}

相关文章
|
7月前
|
安全 Java 编译器
C++进阶(1)——继承
本文系统讲解C++继承机制,涵盖继承定义、访问限定符、派生类默认成员函数、菱形虚拟继承原理及组合与继承对比,深入剖析其在代码复用与面向对象设计中的应用。
|
8月前
|
C++ Windows
应用程序无法正常启动(0xc0000005)?C++报错0xC0000005如何解决?使命召唤17频频出现闪退,错误代码0xC0000005(0x0)
简介: 本文介绍了Windows应用程序出现错误代码0xc0000005的解决方法,该错误多由C++运行库配置不一致或内存访问越界引起。提供包括统一运行库配置、调试排查及安装Visual C++运行库等解决方案,并附有修复工具下载链接。
2111 1
|
10月前
|
API 数据安全/隐私保护 C++
永久修改机器码工具, exe一机一码破解工具,软件机器码一键修改工具【c++代码】
程序实现了完整的机器码修改功能,包含进程查找、内存扫描、模式匹配和修改操作。代码使用
|
11月前
|
存储 安全 Java
c++--继承
c++作为面向对象的语言三大特点其中之一就是继承,那么继承到底有何奥妙呢?继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用,继承就是类方法的复用。
219 0
|
11月前
|
C++
爱心代码 C++
这段C++代码使用EasyX图形库生成动态爱心图案。程序通过数学公式绘制爱心形状,并以帧动画形式呈现渐变效果。运行时需安装EasyX库,教程链接:http://【EasyX图形库的安装和使用】https://www.bilibili.com/video/BV1Xv4y1p7z1。代码中定义了屏幕尺寸、颜色数组等参数,利用随机数与数学函数生成动态点位,模拟爱心扩散与收缩动画,最终实现流畅的视觉效果。
1190 0
|
安全 C++
【c++】继承(继承的定义格式、赋值兼容转换、多继承、派生类默认成员函数规则、继承与友元、继承与静态成员)
本文深入探讨了C++中的继承机制,作为面向对象编程(OOP)的核心特性之一。继承通过允许派生类扩展基类的属性和方法,极大促进了代码复用,增强了代码的可维护性和可扩展性。文章详细介绍了继承的基本概念、定义格式、继承方式(public、protected、private)、赋值兼容转换、作用域问题、默认成员函数规则、继承与友元、静态成员、多继承及菱形继承问题,并对比了继承与组合的优缺点。最后总结指出,虽然继承提高了代码灵活性和复用率,但也带来了耦合度高的问题,建议在“has-a”和“is-a”关系同时存在时优先使用组合。
870 6
|
编译器 C++ 开发者
【C++篇】深度解析类与对象(下)
在上一篇博客中,我们学习了C++的基础类与对象概念,包括类的定义、对象的使用和构造函数的作用。在这一篇,我们将深入探讨C++类的一些重要特性,如构造函数的高级用法、类型转换、static成员、友元、内部类、匿名对象,以及对象拷贝优化等。这些内容可以帮助你更好地理解和应用面向对象编程的核心理念,提升代码的健壮性、灵活性和可维护性。
|
编译器 C++ 容器
【c++11】c++11新特性(上)(列表初始化、右值引用和移动语义、类的新默认成员函数、lambda表达式)
C++11为C++带来了革命性变化,引入了列表初始化、右值引用、移动语义、类的新默认成员函数和lambda表达式等特性。列表初始化统一了对象初始化方式,initializer_list简化了容器多元素初始化;右值引用和移动语义优化了资源管理,减少拷贝开销;类新增移动构造和移动赋值函数提升性能;lambda表达式提供匿名函数对象,增强代码简洁性和灵活性。这些特性共同推动了现代C++编程的发展,提升了开发效率与程序性能。
485 12
|
11月前
|
人工智能 机器人 编译器
c++模板初阶----函数模板与类模板
class 类模板名private://类内成员声明class Apublic:A(T val):a(val){}private:T a;return 0;运行结果:注意:类模板中的成员函数若是放在类外定义时,需要加模板参数列表。return 0;
262 0
|
11月前
|
存储 编译器 程序员
c++的类(附含explicit关键字,友元,内部类)
本文介绍了C++中类的核心概念与用法,涵盖封装、继承、多态三大特性。重点讲解了类的定义(`class`与`struct`)、访问限定符(`private`、`public`、`protected`)、类的作用域及成员函数的声明与定义分离。同时深入探讨了类的大小计算、`this`指针、默认成员函数(构造函数、析构函数、拷贝构造、赋值重载)以及运算符重载等内容。 文章还详细分析了`explicit`关键字的作用、静态成员(变量与函数)、友元(友元函数与友元类)的概念及其使用场景,并简要介绍了内部类的特性。
411 0

推荐镜像

更多
  • DNS