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

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

相关文章

小白也能轻松上手! 路由器设置优化指南

《小白也能轻松上手!路由器设置优化指南》在日常生活中,我们常常会遇到WiFi网速慢的问题,这主要受到三个方面的影响,首要原因是WiFi产品的配置优化不合理,其次是硬件性能的不足,以及宽带线路本身的质... 在数字化时代,网络已成为生活必需品,追剧、游戏、办公、学习都离不开稳定高速的网络。但很多人面对新路由器

MySQL深分页进行性能优化的常见方法

《MySQL深分页进行性能优化的常见方法》在Web应用中,分页查询是数据库操作中的常见需求,然而,在面对大型数据集时,深分页(deeppagination)却成为了性能优化的一个挑战,在本文中,我们将... 目录引言:深分页,真的只是“翻页慢”那么简单吗?一、背景介绍二、深分页的性能问题三、业务场景分析四、

Linux进程CPU绑定优化与实践过程

《Linux进程CPU绑定优化与实践过程》Linux支持进程绑定至特定CPU核心,通过sched_setaffinity系统调用和taskset工具实现,优化缓存效率与上下文切换,提升多核计算性能,适... 目录1. 多核处理器及并行计算概念1.1 多核处理器架构概述1.2 并行计算的含义及重要性1.3 并

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