[C++ 从入门到精通] 13.派生类、调用顺序、继承方式、函数遮蔽

news2024/12/26 11:11:57
  • 📢博客主页:https://loewen.blog.csdn.net
  • 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
  • 📢本文由 丶布布原创,首发于 CSDN,转载注明出处🙉
  • 📢现在的付出,都会是一种沉淀,只为让你成为更好的人✨

文章预览:

      • 一. 派生类概念
      • 二. 派生类对象定义时,调用构造函数的顺序
      • 三. 继承方式
      • 四. 函数遮蔽


一. 派生类概念

派生类:在C++中,继承就是在一个已存在的类的基础上建立一个新的类。已存在的类称为「基类」,又称为「父类」;新建立的类称为「派生类」,又称为「子类」。

继承:「派生类」从已有的「基类」那里获得其相关特性(一些公用的成员变量和成员函数),这种现象称为类的继承。「继承」是面向对象程序设计的核心思想之一。好处:可以减少代码量,这样在写派生类的时候,只写与派生类相关的成员变量和成员函数即可,公用的相关功能可以直接从基类中继承使用。

继承的书写格式class 子类名 : 继承方式(public/protected/private) 父类名

举例

class Human  //父类
{
public:
	Human();
	Human(int &a);	
	~Human();

	void print(){
		std::cout << "执行了Human的成员函数print()" << std::endl;
	}

public: 
	int  m_age;        //年龄
	char m_name[100];  //名字
};
#include "Human.h"

class Man : public Human //继承:表示Man是Human的子类
{
public:
	Man();
	~Man();

private:
	int m_num;
};
#include "Human.h"
#include "man.h"

int main()
{

	Man man;        //定义一个子类的对象   
	man.print();    //通过<对象.>的方式可以调用父类的函数print()
	man.m_num;      //通过<对象.>的方式可以调用自己的变量

	system("pause");
    return 0;
}

二. 派生类对象定义时,调用构造函数的顺序

继续上面的来:

Human::Human()
{
	std::cout << "执行了Human::Human()默认构造函数" << std::endl;
}
Man::Man()
{
	std::cout << "执行了Man::Man()默认构造函数" << std::endl;
}
int main()
{
	Man man;        / //当定义子类对象时,父类的构造函数也会调用的  

	system("pause");
    return 0;
}

在这里插入图片描述

可以看出,当定义子类Man对象时,不仅仅调用了子类Man的构造函数,也调用了父类Human的构造函数,而且是先调用。


三. 继承方式

🐕 三种访问权限:

  1. public:可以被任意实体访问;
  2. protected:只允许子类及本类的成员函数访问;
  3. private:只允许本类的成员函数访问

🐪 三种继承方式:public继承 、 protect继承和private继承

基类中的访问权限子类继承基类的方式子类得到的访问权限
public& public继承public
protected & public继承protected
private& public继承子类无权访问
public& protected继承protected
protected& protected继承protected
private& protected继承子类无权访问
public& private继承private
protected & private继承private
private& private继承子类无权访问

🐩 总结:

  1. public继承基类:不改变基类成员的访问权限
  2. protected继承基类:将基类中public成员变为子类的protected成员,其它成员的访问权限不变;
  3. private继承基类:使得基类所有成员在子类中的访问权限变为private
  4. 基类中的private成员不受继承方式的影响,子类永远无权访问;
  5. 对于基类来讲,尤其是基类的成员函数,如果不想让外面访问,就设置为private;如果想让子类能够访问,就设置为protected;如果想公开,就设置为public

四. 函数遮蔽

子类中如果有和父类一样的同名函数,那么子类对象则无法访问调用父类中的同名函数。

解决措施如下:

1、在子类的成员函数中,通过父类::同名函数来强制调用父类函数;

在这里插入图片描述

2、通过关键字using 让父类的同名函数在子类中可见;

在这里插入图片描述

ps:通过关键字using方法只适合子类和父类中的函数同名不同参数情况,可通过该方式调用父类同名函数;若子类和父类中的函数同名同参数情况,则还需使用方法一;


下雨天,最惬意的事莫过于躺在床上静静听雨,雨中入眠,连梦里也长出青苔。

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

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

相关文章

程序员进阶高管指南,看懂工资最少加5k

从象牙塔毕业跨入社会大染缸&#xff0c;很多人都跟我谈过他们的职业困惑&#xff0c;其中有一些刚刚毕业&#xff0c;有些人已经工作超过10年。基本上是围绕着怎样持续提升&#xff0c;怎样晋升为高级管理者。那么这篇文章&#xff0c;我就来谈一谈程序员到高管的跃升之路。 …

XC3320 离线式、无电感交流输入线性稳压器 可替代KP3310 固定5V输出电压

XC3320 是一款紧凑型无电感设计的离线式线性稳压器。XC3320 可获得 5V输出电压。XC3320 是一种简单可靠的获得偏置供电的离线式电源解决方案。XC3320 集成了 650V 功率 MOSFET&#xff0c;启动控制电路,VDD 电压控制电路,AC 交流信号同步检测电路&#xff0c;低压差稳压器等。该…

vue3实现验证码校验的功能

&#x1f4d3;最近想实现使用vue3实现一个简易的前端验证码校验的功能&#xff0c;就花了点时间实现了&#xff0c;这只是一个简易版的&#xff0c;但是用在项目中是没有啥问题的&#xff0c;废话不多说&#xff0c;先来看下最终实现的效果。 &#x1f4d3;现在让我们来一步一步…

micro_ros

原文链接Supported Hardware | micro-ROS Supported Hardware The main targets of micro-ROS are mid-range 32-bits microcontroller families. Usually, the minimum requirements for running micro-ROS in an embedded platform are memory constraints. Since memory u…

【Spring集成MyBatis】MyBatis的Dao层实现(基于配置,非注解开发)

文章目录 1. MyBatis的dao层实现(传统方式)——需要写接口及其实现类2. MyBatis的代理开发方式——仅需写接口 1. MyBatis的dao层实现(传统方式)——需要写接口及其实现类 传统方式就是在项目下边建立dao包&#xff0c;里面包含接口及其实现类&#xff0c;文件结构如下&#x…

【Spring Cloud实战】分布式系统控制与组件应用

在现代软件开发中&#xff0c;分布式系统已经成为一种常见的架构模式&#xff0c;被广泛应用于各种规模的企业和组织中。这种架构模式通过将应用程序拆分为独立的组件&#xff0c;并分布在不同的计算机节点上运行&#xff0c;使得系统能够应对高负载和大规模的数据处理需求&…

FPGA自学教程 03 设计一个以1秒频率闪烁的LED灯

双非硕士 研一下学期视觉转FPGA&#xff08;在b站跟小梅哥视频&#xff09; 长路漫漫&#xff0c;但希望前途光明 此篇文章开始省去建工程的操作&#xff0c;如果有不懂的同学可以看我之前的两篇文章。 1.新建文件名为&#xff1a;led_flash&#xff0c;等待右侧弹出Verilog代…

飞翔的小鸟游戏

GameApp类 package App;import main.GameFrame;public class GameApp {public static void main(String[] args) {//游戏的入口new GameFrame();} } main Barrier 类 package main;import util.Constant; import util.GameUtil;import java.awt.*; import java.awt.image.Buf…

C++设计模式之工厂模式(上)——简单工厂模式

工厂模式 概述简单工厂模式介绍示例示例使用运行结果缺点 概述 工厂模式属于一种创建型设计模式。其可以分为简单工厂模式&#xff0c;工厂模式和抽象工厂模式。工厂模式分为上、中、下三篇&#xff0c;本篇主要介绍简单工厂模式。 简单工厂模式 介绍 简单工厂模式可以理解…

【MySQL】多表查询、子查询、自连接、合并查询详解,包含大量示例,包你会。

复合查询 前言正式开始一些开胃菜多表查询自连接子查询单行子查询多行子查询in关键字all关键字any关键字多列子查询在from中使用子查询 合并查询union 和 union all 前言 我前面博客讲的所有的查询都是在单表中进行的&#xff0c;从这里开始就要专门针对查询这个话题进行进一步…

测试开发(二) 开发chrome插件,提升测试效率

chrome插件截图 功能说明 自定义拦截请求response数据、并根据需要做解析&#xff0c;方便检查数据&#xff0c;提升测试效率。 chrome插件截图 功能说明 自定义修改请求的header、接口返回的response的header&#xff0c;提升模拟请求的效率&#xff0c;进而提升测试效率。…

算法刷题-动态规划2(继续)

算法刷题-动态规划2 珠宝的最高价值下降路径最小和 珠宝的最高价值 题目 大佬思路 多开一行使得代码更加的简洁 移动到右侧和下侧 dp[ i ][ j ]有两种情况&#xff1a; 第一种是从上面来的礼物最大价值&#xff1a;dp[ i ][ j ] dp[ i - 1 ][ j ] g[ i ][ j ] 第二种是从左…

csapp 深入理解计算机系统 bomb lab(2)phase_2

bomblab及phase_1 同phase_1可以查看phase_2的汇编代 call 40145c <read_six_numbers>可以看出phase_2调用了read_six_numbers&#xff0c;然后把1和 (%rsp)比较&#xff0c;如果不是1&#xff0c;就会调用<explode_bomb>函数。 %rsp 存放地址&#xff0c;(%r…

csdn最新最全的Selenium教程:定位frame框架中的元素

定位frame框架中的元素 在web应用中经常会出现frame嵌套的应用&#xff0c;假设页面上有A,B两个frame,其中B在A内&#xff0c;那么定位B中的内容则需要先到A&#xff0c;再到B。 switch_to.frame方法可以把当前定位的主题切换到frame里&#xff0c;在frame里实际是嵌套了另外一…

vue项目引入中国地图

先安装有china.js的版本 npm install echarts4.8 --save //以前的版本有china.js <template><div class"mapMain"><div id"map" style"width: 30vw; height: 30vw;" /></div> </template><script>//引入文…

AIGC 实践——七鱼客服机器人业务指标波动分析

智能客服机器人的业务指标&#xff0c;最常见的就是解决率&#xff0c;解决率的高低直接关系到客户采购机器人的价值。解决率很高&#xff0c;客户可以省下很多成本开销&#xff0c;如果解决率很低&#xff0c;那么就没有必要采购这个客服机器人。所以&#xff0c;智能客服机器…

电机应用开发-直流有刷电机电流环控制实现

目录 直流有刷电机电流环控制实现 硬件设计 直流电机电流环控制-位置式PID实现 编程要点 配置ADC可读取电流值 配置基本定时器6产生定时中断读取当前电路中驱动电机的电流值并执行PID运算 配置定时器1输出PWM控制电机 ADC数据处理 编写位置式PID算法 直流电机电流环控…

jquery实现:多个输入框字数统计示例

一、实现效果&#xff1a; 二、代码实现&#xff1a; 每个输入框添加了相同的类名 inputField 并且每个输入框旁边的字数统计使用相同的类名 charCount。 然后使用 jQuery 的类选择器 $(‘.inputField’) 来选中所有具有该类名的输入框&#xff0c;并为它们绑定了 input 事件。…

【学历是敲门砖】如果你想有个好的起点,不妨冲一冲计算机考研,这本书将会助你一臂之力

目录 计算机考研难点 《计算机考研精炼1000题》揭秘问答 1. 为什么是1000题&#xff1f; 2. 有什么优势&#xff1f; 3. 编写团队水平如何&#xff1f; 4. 题目及解析品质如何&#xff1f;可以试读吗&#xff1f; 购买链接 高质量的学习提升圈子 京东热卖下单链接&…

本地MinIO存储服务通过Java程序结合Cpolar内网穿透进行远程访问

[本地MinIO存储服务通过Java程序结合Cpolar内网穿透进行远程访问] 前言 MinIO是一款高性能、分布式的对象存储系统&#xff0c;它可以100%的运行在标准硬件上&#xff0c;即X86等低成本机器也能够很好的运行MinIO。它的优点包括高性能、高可用性、易于部署和管理、支持多租户…