面向对象的程序设计:利用虚基类优化继承关系

2024-06-14 08:20

本文主要是介绍面向对象的程序设计:利用虚基类优化继承关系,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

之前提到过两个继承与派生的例题,我们从更简单的那个入手,利用虚基类优化后的代码如下:

点我跳到继承与派生习题讲解

#include<iostream>
#include<iomanip>
#include<string>
using namespace std;
class person {
protected:string name;int age;char gender;string address;string phone;
};
class teacher:virtual public person {//教师类(基类)
protected:string title;//职称
public:teacher(const string na,const int age,const char gender, const string address,const string phone,const string title) {this->name = na;this->age = age;this->gender = gender;this->address = address;this->phone = phone;this->title = title;}void display();
};
class cadre:virtual public person {//干部类(基类)
protected:string post;//职务public:cadre(string name, int age, char gender, string address, string phone, string post) {this->name = name;this->age = age;this->gender = gender;this->address = address;this->phone = phone;this->post = post;}void display();
};
class teacher_cadre :public teacher, public cadre,virtual public person {//教师干部类(派生类)
private:double wages;//工资
public:teacher_cadre(string name, int age, char gender, string address, string phone, string title, string post, double wages):teacher(name,age,gender,address,phone,title) ,cadre(name, age, gender, address, phone, post)//成员表部分{this->wages = wages;}void show();
};void teacher::display() {cout << setw(10) << "姓名:" << this->name << endl;//输出优化cout << setw(10) << "年龄:" << this->age << endl;cout << setw(10) << "性别:" << this->gender << endl;cout << setw(10) << "地址:" << this->address << endl;cout << setw(10) << "电话:" << this->phone << endl;cout << setw(10) << "职称:" << this->title << endl;
}void cadre::display() {cout << setw(10) << "姓名:" << this->name << endl;cout << setw(10) << "年龄:" << this->age << endl;cout << setw(10) << "性别:" << this->gender << endl;cout << setw(10) << "地址:" << this->address << endl;cout << setw(10) << "电话:" << this->phone << endl;cout << setw(10) << "职务:" << this->post << endl;
}void teacher_cadre::show() {teacher::display();cout << setw(10) << "职务:" << cadre::post << endl;cout << setw(10) << "工资:" << wages << endl;
}int main() {teacher t("sgq", 18, 'f', "华南师范大学", "18249096680", "正高级教授");cadre c("yjb", 18, 'm', "计算机学院", "13936090789", "sgq的助教");teacher_cadre tc("lyq", 19, 'f', "哲学与社会发展学院", "15813624032, "高级教授", "校长", 5201314);t.display();cout << endl;c.display();cout << endl;tc.show();
}

上述代码增加了一个基类Person类,包含了教授和职工都具有的数据,之后更改其派生的语句,在继承方式前加上关键字“virtual”即可减少运行的冗余,运行结果不变。

这篇关于面向对象的程序设计:利用虚基类优化继承关系的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1059869

相关文章

java中新生代和老生代的关系说明

《java中新生代和老生代的关系说明》:本文主要介绍java中新生代和老生代的关系说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、内存区域划分新生代老年代二、对象生命周期与晋升流程三、新生代与老年代的协作机制1. 跨代引用处理2. 动态年龄判定3. 空间分

MyBatisPlus如何优化千万级数据的CRUD

《MyBatisPlus如何优化千万级数据的CRUD》最近负责的一个项目,数据库表量级破千万,每次执行CRUD都像走钢丝,稍有不慎就引起数据库报警,本文就结合这个项目的实战经验,聊聊MyBatisPl... 目录背景一、MyBATis Plus 简介二、千万级数据的挑战三、优化 CRUD 的关键策略1. 查

C++11委托构造函数和继承构造函数的实现

《C++11委托构造函数和继承构造函数的实现》C++引入了委托构造函数和继承构造函数这两个重要的特性,本文主要介绍了C++11委托构造函数和继承构造函数的实现,具有一定的参考价值,感兴趣的可以了解一下... 目录引言一、委托构造函数1.1 委托构造函数的定义与作用1.2 委托构造函数的语法1.3 委托构造函

Java 继承和多态的作用及好处

《Java继承和多态的作用及好处》文章讲解Java继承与多态的概念、语法及应用,继承通过extends复用父类成员,减少冗余;多态实现方法重写与向上转型,提升灵活性与代码复用性,动态绑定降低圈复杂度... 目录1. 继承1.1 什么是继承1.2 继承的作用和好处1.3 继承的语法1.4 子类访问父类里面的成

Java继承映射的三种使用方法示例

《Java继承映射的三种使用方法示例》继承在Java中扮演着重要的角色,它允许我们创建一个类(子类),该类继承另一个类(父类)的所有属性和方法,:本文主要介绍Java继承映射的三种使用方法示例,需... 目录前言一、单表继承(Single Table Inheritance)1-1、原理1-2、使用方法1-

C#继承之里氏替换原则分析

《C#继承之里氏替换原则分析》:本文主要介绍C#继承之里氏替换原则,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#里氏替换原则一.概念二.语法表现三.类型检查与转换总结C#里氏替换原则一.概念里氏替换原则是面向对象设计的基本原则之一:核心思想:所有引py

SpringBoot中HTTP连接池的配置与优化

《SpringBoot中HTTP连接池的配置与优化》这篇文章主要为大家详细介绍了SpringBoot中HTTP连接池的配置与优化的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、HTTP连接池的核心价值二、Spring Boot集成方案方案1:Apache HttpCl

PyTorch高级特性与性能优化方式

《PyTorch高级特性与性能优化方式》:本文主要介绍PyTorch高级特性与性能优化方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、自动化机制1.自动微分机制2.动态计算图二、性能优化1.内存管理2.GPU加速3.多GPU训练三、分布式训练1.分布式数据

MySQL中like模糊查询的优化方案

《MySQL中like模糊查询的优化方案》在MySQL中,like模糊查询是一种常用的查询方式,但在某些情况下可能会导致性能问题,本文将介绍八种优化MySQL中like模糊查询的方法,需要的朋友可以参... 目录1. 避免以通配符开头的查询2. 使用全文索引(Full-text Index)3. 使用前缀索

C#实现高性能Excel百万数据导出优化实战指南

《C#实现高性能Excel百万数据导出优化实战指南》在日常工作中,Excel数据导出是一个常见的需求,然而,当数据量较大时,性能和内存问题往往会成为限制导出效率的瓶颈,下面我们看看C#如何结合EPPl... 目录一、技术方案核心对比二、各方案选型建议三、性能对比数据四、核心代码实现1. MiniExcel