4.2 面向对象程序设计-类的继承实验

news2024/12/23 6:02:54

本文仅供学习交流,严禁用于商业用途,如本文涉及侵权请及时联系将于24小时内删除

目录

1.实验内容

2.实验原理

2.1类的继承

2.2 继承的优点和缺点

2.3 继承的方式

3.实验代码

1.实验内容

       创建一个父类CalcTime,在父类中依次定义用于保存小时值、分钟值和秒值的成员变量mHour、mMin和mSec;用于指定小时值、分钟值的常量TIME_VAL_HOUR和TIME_VAL_MIN;用于计算小时值和分钟值,同时获取对应值后向外输出的GetTimeVal()函数。然后定义一个继承父类的CalcAllTime子类,在子类中定义用于计算秒值,同时获取对应值向外输出的GetSecVal()函数;用于判断tick是否符合条件的CalcFlg()函数;用于打印转换结果的DispTime()函数。在main()函数中创建一个CalcAllTime型对象,该对象名为ct,然后获取键盘输入值(0~86399之间的值,包括0和86399),实现秒值-时间值转换,并输出转换结果。

2.实验原理

2.1类的继承

       继承是一种新建类的方式,新建的类称为子类,被继承的类称为父类。继承是类与类之间的关系,使用继承可以减少代码的冗余。

       例如,现在有两个问题,第一个是使用看门犬解决看家问题,第二个是使用牧羊犬解决放牧问题。由于看门犬和牧羊犬都属于犬类,具有与犬类相同的属性和行为,例如性别和身长属性,以及行走和奔跑行为,这样就可以先定义一个犬类。然后,在使用看门犬解决看家问题时,就可以创建一个继承犬类的看门犬类,并且在看门犬类中新增看门行为的定义;在使用牧羊犬解决放牧问题时,就可以创建一个继承犬类的牧羊犬类,并且在牧羊犬类中新增牧羊行为的定义,如下图所示。这样,就节省了定义犬类与看门狗、牧羊犬共同具有的属性和行为的时间,这就是继承的基本思想。

2.2 继承的优点和缺点

        如果不使用继承的思想,分别定义看门犬类和牧羊犬类,代码就会出现重复,这样不仅会导致代码臃肿,而且在后期维护中,如果重复性的地方出错,就需要修改大量的代码,使得系统维护性低。而使用继承的思想,以上问题都可以解决,因此,继承的优点有:

①代码冗余度低,开发时间短;

②代码扩展性高,系统开发灵活性强;

③代码重用性高,系统出错概率低。

除了优点,继承也有相应的缺点:

①继承是侵入性的,只要继承,就必须拥有父类的所有属性和方法;

②子类拥有父类的属性和方法,增加了子类代码的约束,降低了代码的灵活性;

③当父类的常量、变量和方法被修改时,需要考虑子类的修改,而且在缺乏规范的环境下,这种修改可能带来大段代码需要重构的后果,增强了代码的耦合性。

2.3 继承的方式

       类的继承是单一继承的,即一个子类只能拥有一个父类,子类除了可以扩展父类的功能,还可以重写父类的成员方法。

       类有3种继承方式:公有继承(public)、私有继承(private)和保护继承(protected)。

       公有继承可以理解为父类的public成员和protected成员分别写到子类的public和protected成员中,而父类的private被分到了一个特殊的区域里面,该区域只能用父类原有的方法来访问。

       私有继承可以理解为父类的public成员和protected成员写到子类的private成员中,而父类的private被分到了一个特殊的区域里面,该区域只能用父类原有的方法来访问。

       保护继承可以理解为父类的public成员和protected成员写到子类的protected成员中,而父类的private被分到了一个特殊的区域里面,该区域只能用父类原有的方法来访问。

3.实验代码

#include <iostream>
using namespace std;

//基类
class CalcTime
{
	private:
		int mHour;  //小时值
		int mMin;   //分钟值
		
	public:
		int mSec;   //秒值
		
		static const int TIME_VAL_HOUR = 0x01;
		static const int TIME_VAL_MIN  = 0x02;
		
		//外部接口,输出转换的时间值
		int GetTimeVal(int type,int tick) 
		{
            int timeVal = 0;
			
			//tick对3600取模赋值给mHour
            mHour = tick / 3600;        
				
			//tick对3600取余后再对60取模赋值给mMin
            mMin  = (tick % 3600) / 60;
			
            switch(type)
            {
                case TIME_VAL_HOUR:
                    timeVal = mHour;
                    break;
                case TIME_VAL_MIN:
                    timeVal = mMin;
                    break;
                default:
                    break;
            }

            return timeVal;
        }
};

//类CalcAllTime通过公有继承方式继承基类CalcTime
class CalcAllTime: public CalcTime
{
	public:
		//外部接口,输出转换的秒值
		int GetSecVal(int tick)
		{
			int timeSec = 0;

            //tick对3600取余后再对60取余赋值给mSec
            mSec  = (tick % 3600) % 60; 
			timeSec = mSec;
	
			return timeSec;
		}
		
		int CalcFlg(int tick) 
		{
            int validFlag = 0;  //判断tick是否符合条件的标志位
			
            if(tick >= 0 && tick <= 86399) 
			{
                validFlag = 1;  //符合则返回1,然后转换时间     			
            }

            return validFlag;
        }
		
		//获取转换的时间并打印显示
		void DispTime(int tick) 
		{
			int hour; //小时值
			int min;  //分钟值
			int sec;  //秒值  
			
			//当tick的值在0~86399之间时,获取转换的时间值
			if(CalcFlg(tick) == 1) 
			{           
				hour = GetTimeVal(TIME_VAL_HOUR,tick);
				min  = GetTimeVal(TIME_VAL_MIN,tick);
				sec  = GetSecVal(tick);
			
				//打印转换之后的时间结果
				cout << "Current time : " << hour << "-" << min << "-" << sec << endl;
			}
		}
};

int main()
{
	CalcAllTime ct;
	
	int tick = 0;   //0~86399    
	
	cout << "Please input a tick between 0~86399" << endl;
	cin  >> tick; 
	
	ct.DispTime(tick);
	
	return 0;
}

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

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

相关文章

Java基础(二)-- 面向对象

文章目录 第二章、面向对象一、类和对象1、基本概念1&#xff09;什么是对象2&#xff09;什么是面向对象3&#xff09;什么是类4&#xff09;什么是对象的属性和方法5&#xff09;类和对象的关系 2、单一职责原则3、对象实例化1&#xff09;Java内存管理之堆和栈 4、构造方法5…

js可视化爬取数据生成当前热点词汇图

功能 可以爬取到很多数据&#xff0c;并且生成当前的热点词汇图&#xff0c;词越大越热门&#xff08;词云图&#xff09; 这里以b站某个评论区的数据为例&#xff0c;爬取63448条数据生成这样的图片 让我们能够更加直观的看到当前的热点 git地址 可以直接使用&#xff0c;中文…

C++进阶03 模板与群体数据

听课笔记简单整理&#xff0c;供小伙伴们参考~&#x1f95d;&#x1f95d; 第1版&#xff1a;听课的记录代码~&#x1f9e9;&#x1f9e9; 编辑&#xff1a;梅头脑&#x1f338; 审核&#xff1a;文心一言 目录 &#x1f433;课程来源 &#x1f40b;模板 &#x1f40b;8.…

【刷题篇】回溯算法(三)

文章目录 1、全排列2、子集3、找出所有子集的异或总和再求和4、全排列 II5、电话号码的字母组合6、括号生成 1、全排列 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 class Solution { public:vector<vector<i…

太阳光光照试验耐久性老化试验使用太阳光模拟器系统

上海科迎法电气科技有限公司生产的太阳光模拟器系统主要应用于太阳能研究、材料研究、光伏组件测试、空间环境模拟器、植物生长研究、光热模拟等领域&#xff0c;主要表现特征为&#xff1a; 1. 太阳能研究&#xff1a;可用于模拟不同光照条件下太阳能电池的性能测试和研究&am…

Element ui 动态展示表格列,动态格式化表格列的值

需求 后台配置前端展示的表格列&#xff0c;遇到比如 文件大小这样的值&#xff0c;如果后台存的是纯数字&#xff0c;需要进行格式化展示&#xff0c;并且能控制显示的小数位数&#xff0c;再比如&#xff0c;部分列值需要加单位等信息&#xff0c;此外还有状态类&#xff0…

JavaEE初阶Day 7:多线程(5)

目录 Day 7&#xff1a;多线程&#xff08;5&#xff09;1. 死锁2. 死锁场景3. 场景二&#xff1a;两个线程&#xff0c;两把锁4. 场景三&#xff1a;N个线程&#xff0c;M把锁5. 避免死锁问题6. 内存可见性问题 Day 7&#xff1a;多线程&#xff08;5&#xff09; 回顾synchr…

每日一题---OJ题: 环形链表 II

片头 嗨! 小伙伴们,大家好! 我们又见面啦,在上一篇中,我们学习了环形链表I, 今天我们继续来打boss,准备好了吗? Ready Go ! ! ! emmm,同样都是环形链表,有什么不一样的地方呢? 肯定有, 要不然也不会一个标记为"简单" ,一个标记为"中等"了,哈哈哈哈哈 …

2024年MathorCup数学建模A题移动通信网络中PCI规划问题解题文档与程序

2024年第十四届MathorCup高校数学建模挑战赛 A题 移动通信网络中PCI规划问题 原题再现&#xff1a; 物理小区识别码(PCI)规划是移动通信网络中下行链路层上&#xff0c;对各覆盖小区编号进行合理配置&#xff0c;以避免 PCI 冲突、PCI 混淆以及 PCI 模3 千扰等现象。PCI 规划…

基于SpringBoot+Vue的毕业生学历证明系统(源码+文档+部署+讲解)

一.系统概述 快速发展的社会中&#xff0c;人们的生活水平都在提高&#xff0c;生活节奏也在逐渐加快。为了节省时间和提高工作效率&#xff0c;越来越多的人选择利用互联网进行线上打理各种事务&#xff0c;然后线上管理系统也就相继涌现。与此同时&#xff0c;人们开始接受方…

git submodule---同步最新的内容

0 Preface/Foreword 1 同步最新submodule内容到repo中 项目的repo包含了一个子模块&#xff0c;在开发过程中&#xff0c;经常需要同步子模块最新的commit到repo中。该如何操作呢&#xff1f; 本地在克隆时候&#xff0c;已经同步把子模块中的内容克隆下来了&#xff0c;但是…

Rust跨平台编译

❝ 如果你感觉自己被困住了&#xff0c;焦虑并充满消极情绪&#xff0c;生命出现了停滞&#xff0c;那么治疗方法很简单&#xff1a;「做点什么」。 ❞ 大家好&#xff0c;我是「柒八九」。一个「专注于前端开发技术/Rust及AI应用知识分享」的Coder 前言 之前我们不是写了一篇R…

潍微科技-水务信息管理平台 ChangePwd SQL注入漏洞复现(CNVD-2024-14945)

0x01 产品简介 水务信息管理平台主要帮助水务企业实现水质状态监测、管网运行监控、水厂安全保障、用水实时监控以及排放有效监管,确保居民安全稳定用水、环境有效保护,全面提升水务管理效率。由山东潍微科技股份有限公司研发,近年来,公司全力拓展提升水务、水利信息化业务…

Java---搭建junit4.x单元测试环境,并进行测试

搭建junit4.x单元测试环境 1.选择Project Structure 2.选择Modules&#xff0c;选择要加入测试环境的模块&#xff0c;选择Dependencies,可以看到当前模块都有哪些依赖。 3.点击 后选择第一个 4.找到你安装IDEA的文件夹&#xff0c;进入到IntelliJ IDEA 2018.3.4\lib目录下…

18.java openCV4.x 入门- Imgproc之色彩映射及颜色空间转换

专栏简介 &#x1f492;个人主页 &#x1f4f0;专栏目录 点击上方查看更多内容 &#x1f4d6;心灵鸡汤&#x1f4d6;我们唯一拥有的就是今天&#xff0c;唯一能把握的也是今天建议把本文当作笔记来看&#xff0c;据说专栏目录里面有相应视频&#x1f92b; &#x1f9ed;文…

kvm虚拟机磁盘镜像加密

一、qcow2的aes加密 低版本的qemu能够支持对qcow2文件进行aes加密的方式&#xff0c;例如对一个已经存在的磁盘文件test.qcow2&#xff0c;可以将其转换为经过加密的qcow2文件。 qemu-img convert -O qcow2 --object secret,idsec0,data123456 -o encryptionon,encrypt.key-s…

为数据穿上安全的外衣——零售电商场景下的数据安全体系建设

在电子商务交易过程中&#xff0c;会涉及大量的个人和财务数据的传输和处理&#xff0c;随着电子商务的发展&#xff0c;数据安全风险也成为一个备受关注的问题。 而跨境电商&#xff0c;属于出海业务&#xff0c;涉及到海外不同国家的政策法规&#xff0c;且数据作为电商的业…

linux安装texlive程序

tex 是文本格式渲染语言&#xff0c; 对数学公式特别友好&#xff0c;所以前沿的科研者基本都要掌握 tex 基本功。Latex 是一款优秀的tex渲染程序&#xff0c;可以直接输出PDF等格式文件。 texlive 是 Latex程序及其周边的一个非常优秀的程序管理包&#xff0c;随着社区的发展…

【InternLM 实战营第二期-笔记4】XTuner 微调个人小助手认知

书生浦语是上海人工智能实验室和商汤科技联合研发的一款大模型,很高兴能参与本次第二期训练营&#xff0c;我也将会通过笔记博客的方式记录学习的过程与遇到的问题&#xff0c;并为代码添加注释&#xff0c;希望可以帮助到你们。 记得点赞哟(๑ゝω╹๑) XTuner 微调个人小助手…

计算机网络之同轴电缆,集线器,网桥,交换机,路由器

ping的过程 两台主机用交叉线连接&#xff0c;通过88.2ping88.3发现底层是先经过广播&#xff0c;通过arp协议&#xff0c;告诉我要找的ip是88.3,然后88.3主机收到后就把自己的mac地址发送回去&#xff0c;同理88.2发现是发给自己的后就进行接收&#xff0c;有了mac地址然后再通…