详细讲解C++ 类的继承

Wazuh部署记录 Wazuh是一个免费的开源安全平台,统一了XDR和SIEM功能。它可以保护内部部署、虚拟化、容器化和基于云的环境中的工作负载。Wazuh帮助组织和个人保护其数据资产免受安全威胁。它被全球数千个组织广泛使用,从小型企业到大型企业。443:仪表盘界面访问端口1515:探针连接服务器端口1514:探针回传信息端口以上3个端口必须打开防火墙。 阅读详情
一个私有的或保护的派生类不是子类,因为非公共的派生类不能做基类能做的所有的事,就是指在公开场合,但是在类内部可以的

一、引言

在C++中,类是提供封装的逻辑单位,类的每一个对象都包含有描述其自身状态的数据集合,并且通过接收特定的消息来处理这个数据集合。如果程序设计人员能够通过增加、修改或替换指定类的部分内容的方法对该类进行剪裁,就可以适应不同的应用,从而在很大程度上增强了数据封装的价值,而接下来要讨论的继承就完全可以实现这种操作。

二、与继承有关的基本概念

继承是一个进程,通过继承,一个对象可以获得另一个对象的属性(包括函数),并可向其中加入属于自己的一些特征。作为C++语言的一种重要机制,用继承的方法可以自动为一个类提供来自另一个类的操作和数据结构,进而使程序设计人员在一个一般的类的基础上很快建立一个新的类,而不必从零开始设计每个类。

当一个类被其他的类继承时,被继承的类称为基类(可不是鸡肋^_^),又称为父类。

继承其他类属性的类称为派生类,又称为子类。

一般情况下,继承的进程起源于一个基类的定义,基类定义了其所有派生类的公有属性。从本质上讲,基类具有同一类集合中的公共属性,派生类继承了这些属性,并且增加了自己特有的属性。从任何已存在的类继承的实质就是建造新的派生类。

三、单重继承、多重继承与继承链

从一个基类派生的继承称为单继承,换句话说,派生类只有一个直接基类。单继承声明语句的常用格式为:

class 派生类名: 访问控制关键字 基类名
{
  数据成员和成员函数声明
};

与此相对地,从多个基类派生的继承称为多继承或多重继承,也就是说,一个派生类有多个直接基类。在某些面向对象的语言(如Java)中不支持类间的多重继承而只支持单重继承,即一个类至多只能有一个直接父类,因此实现类似的功能需要借助接口等其他机制。而在C++中提供了多重继承的语法支持,使得问题变得简单了许多。多重继承声明语句的常用格式为:

class 派生类名: 访问控制关键字 基类名1, 访问控制关键字 基类名2,...
{
  数据成员和成员函数声明
};

除了多重继承之外,一个派生类继承多个基类还有一种方法,就是把派生类作为基类再次供别的类继承,产生多层次的继承关系。例如类A派生类B,类B派生类C,则称类A是类B的直接基类,类B是类C的直接基类,类A是类C的间接基类。类的层次结构也叫做继承链。还是上面的例子,当建立类C的对象时,类A的构造函数最先被调用,接下来被调用的是类B的构造函数,最后是类C的构造函数。析构函数的调用顺序正好相反。当一个派生类继承有层次的类时,继承链上的每个派生类必须将它需要的变量传递给它的基类。

四、公有派生和私有派生

在继承声明语句中,访问控制关键字用于说明在基类定义中所声明的成员和成员函数能够在多大范围内被派生类所访问。访问控制关键字可为public, private或protected。如果访问控制关键字为public,则称派生类从基类公有继承,也称公有派生。如果访问控制关键字为private,则称派生类从基类私有继承,也称私有派生。现在笔者将公有继承和私有继承的具体区别列表如下。

通过上表,我们可以将两种派生的特点总结如下:

基类成员基类private成员基类public成员
派生方式privatepublicprivatepublic
派生类成员不可见不可见可见可见
外部函数不可见不可见不可见可见

(1)无论哪种派生方式,基类中的private成员在派生类中都是不可见的。也就是说,基类中的private成员不允许外部函数或派生类中的任何成员访问。

(2)public派生与private派生的不同点在于基类中的public成员在派生类中的访问属性:
public派生时,基类中的public成员相当于派生类中的public成员。
private派生时, 基类中的public成员相当于派生类中的private成员。

因此,private派生确保基类中的方法只能被派生类的对象的方法间接使用,而不能被外部使用。public派生使派生类对象与外部都可以直接使用基类中的方法,除非这些方法已经被重新定义。

五、保护成员与保护派生

如果想做到基类成员只由有派生血缘关系的成员访问,而不被无血缘关系的对象成员访问,无论用公有派生还是私有派生都无法做到。因为基类成员中的私有成员是别的类(包括派生类)成员不能访问的,而基类中的公有成员在public派生时,不仅可以由派生类对象成员访问,也可以由外部函数访问;而在private派生时,基类中的公有成员虽然允许派生类对象中的成员访问,不允许外部访问,可是再派生出下一级时,由于基类的所有成员已经被私有化,其它类成员也不可再访问。实现只许有派生血缘关系的对象成员访问的方法,是在基类中使用具有另一种访问属性的成员——protected成员。

protected成员是一种血缘关系内外有别的成员。它对派生对象而言,是公有成员,可以访问;对血缘关系外部而言,与私有成员一样被隐藏。

此外,除了允许使用private与public两种派生方式之外,C++还允许使用protected派生方式。现在将三种访问属性不同的成员经三种派生后在派生类中访问属性的变化情况总结如下表,是对上一表格的增进和补充。

派生方式基类的public成员基类的protected成员基类的private成员派生方式引起的访问属性变化概括
private派生变为private成员变为private成员不可见基类中的非私有成员都成为派生类中的私有成员
protected派生变为protected成员变为private成员不可见基类中的非私有成员在派生类中的访问属性都降一级
public派生仍为public成员仍为protected成员不可见基类中的非私有成员在派生类中的访问属性保持不变

需要注意的是,基类的private成员无论经过何种派生,在派生类中都是不可见的。

六、友元类和友元函数

(1)友元函数

通常,类的私有成员只能由本类的成员访问,外部函数只能访问类的成员函数,再由成员函数访问类的私有成员。但是,如果在某个类定义中用friend声明了一个外部函数(也许是其他类的一个成员)后,这个外部函数便可以例外地访问该类的任何私有成员。用friend声明了的外部函数称为这个类的友元函数。

当友元函数是另一个类的成员函数时,应当注意以下几点:

A:友元函数作为一个类的成员函数时,除应当在它所在的类定义中声明之外,还应当在另一个类中声明它的友元关系,声明语句的格式为:

friend 函数类型 函数所在类名::函数名(参数列表);

B:友元函数在引用本类对象的私有成员时无需本类对象的引用参数,但在引用生命它是友元的类的对象中的私有成员时必须有友元类对象的引用参数。

C:一个类的成员函数作另一个类的友元函数时,必须先定义,而不是仅仅声明它。

使用友元函数直接访问对象的私有成员,可以免去再调用类的成员函数所需的开销。同时,友元函数作为类的一个接口,对已经设计好的类,只要增加一条声明语句,便可以使用外部函数来补充它的功能,或架起不同类对象之间联系的桥梁。然而,它同时也破坏了对象封装与信息隐藏,使用时需要谨慎小心。

(2)友元类

也可以把一个类而不仅仅是一个函数声明为另一个类的友元类。这时,只需先声明它而不一定需要先定义。

应当注意,友元关系是单向的,并且只在两个类之间有效。即使类X是类Y的友元,类Y是否是类X的友元也要看类X中是否有相应的声明。即友元关系不具有交换性。若类X是类Y的友元,类Y是类Z的友元,也不一定就说明类X是类Z的友元,即友元关系也不具有传递性。

当一个类要和另一个类协同工作时,使一个类成为另一个类的友元类是很有用的。这时友元类中的每一个成员函数都成为了对方的友元函数。

 
实现边缘实时动物检测:YOLOv5模型优化与树莓派4B部署全攻略 本文介绍了基于高性能计算机训练YOLOv5目标检测模型,并部署到树莓派4B实现实时动物检测的全流程。主要内容包括:1)在高性能计算机上通过Anaconda创建虚拟环境,安装YOLOv5项目并进行模型训练;2)将训练好的best.pt模型迁移到树莓派,配置轻量级Miniconda环境;3)连接树莓派摄像头,运行实时检测程序。该系统兼顾了训练效率和边缘设备部署的实用性,可广泛应用于智慧农业、生态监测等场景。文中详细说明了数据准备、环境配置和部署步骤,为开发轻量级目标检测系统提供了完整参考方案。 阅读详情

相关推荐

用户存续期价值评估CLV(二) BG/NBD Model python模拟

BG/NBD Model …继续 想象每一个客户有两个硬币,一个“Buy Coin"控制客户购买的概率;一个"Die Coin"控制客户流失、不再购买的概率。 前面假设了客户的交易次数服从泊松过程: 在一年中的每个月,客户都以抛硬币的方式来决定是否购买。我们所观察到的购买次数取决与泊松分布的参数 ????。 %matplotlib inline import numpy as np impor...

weixin_43171270的博客 3426

c++:继承(超详解)

目录一:什么是继承二:继承的格式继承的总结:二:子类和父类(基类和派生类)1.子类和父类的相互赋值:2.同名的成员变量3.同名成员函数三:子类中默认的成员函数1.构造函数2.析构函数3.拷贝构造4.赋值运算符重载 四:单继承和多继承单继承: 多继承:菱形继承解决方法一:解决方法二:单继承和多继承的总结:定义:继承(inheritance)机制是面向对象程序设计中使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能。这样产生的新类,称派生类(或子类),被继承的类称基类(或父类)

qq_62718027的博客 8万+

FA 新增资产API Demo

DECLARE l_trans_rec fa_api_types.trans_rec_type; l_dist_trans_rec fa_api_types.trans_rec_type; l_asset_hdr_rec fa_api_types.asset_hdr_rec_type; l_asset_desc_rec fa_a

chosen1brain的专栏 2142

c++ 类的继承

一、类的基本概念 c++最重要的特征是代码重用,通过继承机制可以利用已有的数据类型来定义新的数据类型,新的类不仅拥有旧类的成员,还拥有新定义的成员。 一个 B 类继承于A类,或称从类 A 派生类 B。这样的话,类 A 成为基类(父类), 类B成为派生 类(子类)。 派生类中的成员,包含两大部分: 一类是从基类继承过来的,一类是自己增加的成员。 从基类继承过过来的表现其共性,而新增的成员体现了其个性。 继承的优点:减少代码的冗余 提高代码的重用性 二、继承的格式 派生类定义格式: Class 派生类

tranquilllll的博客 8989

逆向淘宝x-mini-wua:从加密算法到设备指纹的生成逻辑

本文深入剖析了淘宝风控核心参数x-mini-wua的生成逻辑与加密算法。通过逆向分析,揭示了其作为设备“身份证”的作用,详细拆解了从硬件信息采集、SG_INNER_DATA文件解密、关键参数提取到最终长wua合成的完整技术链条,并探讨了模拟生成与绕过风控的实战思路及注意事项。

year5的博客 1076

AI人工智能与模拟退火:碰撞出的智慧火花

本文旨在为读者全面介绍模拟退火算法在人工智能领域的应用。我们将涵盖从基础理论到实际实现的完整知识体系,帮助读者理解这一受自然界启发的优化技术如何解决复杂的计算问题。文章首先介绍模拟退火的基本概念,然后深入其工作原理和数学基础,接着通过Python实现展示具体应用,最后讨论实际应用场景和未来发展方向。模拟退火(Simulated Annealing, SA):一种受物理退火过程启发的概率性优化算法能量函数(Energy Function):评估系统状态的函数,对应优化问题的目标函数。

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 452

C++类的继承

C++中类的继承 一、继承基本概念 继承是一个进程,通过继承,一个对象可以获得另一个对象的属性(包括函数),并可向其中加入属于自己的一些特征。作为C++语言的一种重要机制,用继承的方法可以自动为一个类提供来自另一个类的操作和数据结构,进而使程序设计人员在一个一般的类的基础上很快建立一个新的类,而不必从零开始设计每个类。 当一个类被其他的类继承时,被继承的类称为基类,又称为父类。 继承其他类属性的类称为派生类,又称为子类。 一般情况下,继承的进程起源于一个基类的定义,基类定义了其所有派生类的公有属性。从本质上

XiaoZ的博客 2055

calibration的“前世今生”——从simulink开发到CANape的XCP标定

整体思路 备注: elf可简单的看作为hex和map的集合,其中包括可执行的程序、变量及其对应的地址(simulink生成代码是也可以勾选生成ASAP2的a2l文件,有变量但变量对应的地址为空,只有编译后才分配地址) 定义变量是观测值还是标定值需要在simulink中的数据字典定义变量存储类型,详见simulink系列。 1. 前期准备A2L的制作 安装完成CanApe软件 , 插上CanApe硬件( 如:vector 1640A)。打开A2L编辑软件 ASAP2 Editor(注意不是ASAP2 Vi

IHTY_NUI的博客 1万+

C++ 继承

介绍C++的单继承、多继承、菱形继承、虚继承和其原理

cp 2015

Jetson Thor平台JP7.0版本96712 GMSL相机驱动调试记录

摘要:本文档记录了在Thor Custom Board (JP7.0GA)上配置GMSL摄像头时遇到的视频流问题及调试过程。问题表现为视频设备(/dev/video11)能正常创建,但获取视频时出现"Internal data stream error",而相同配置在AGX Orin JP6.0上运行正常。通过梳理硬件拓扑、v4l2-ctl测试、提升时钟频率及分析内核日志,发现VI引擎未接收到帧数据包。调试步骤包括检查设备树冲突、调整I2C总线配置、修正通道名称,最终通过屏蔽传感器启动时

jzwjzw19900922的博客 1109

《AI编程实战:深度学习模型改进与系统部署》,改进专栏目录和介绍

专深度学习相关项目都写在本专栏,《一次订阅解锁全部,都有源码,永久观看》,包括车牌识别、股票预测、人脸识别、风格迁移、图像修复、图像超分辨重建、图像分割等任务,Web/PyQt系统实现。引入Transformer、Swin Transformer、DenseNet、ViT、ConvNeXt等算法实战,提供卷积改进,魔改对比实验,模型剪枝,模型蒸馏,模型量化,全网独家整合改进专栏,为不同领域的同学发表论文提供了大力支持。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 3267

【C++】继承(详解)

C++中的继承是一种面向对象编程的特性,它允许一个类(子类)继承另一个类(父类)的属性和方法,并且可以添加自己的属性和方法。通过继承,子类可以重用父类的代码,减少重复编写代码的工作量。在C++中,使用关键字"extends"可以声明一个类继承另一个类。子类将自动继承父类的非私有成员和方法,并可以通过重写(override)父类的方法或添加新方法来实现自己的行为。(光看文字大家肯定还是觉得晦涩难懂的,我们直接看代码)

m0_64826370的博客 3548

Transformer实战(5)——Hugging Face环境配置与应用详解

本文详细介绍 Transformer 模型的实践应用全流程。首先讲解基于 Anaconda 的环境配置,包括 transformers 库安装及 hf-mirror 镜像加速方案。然后以 BERT 为例,演示分词器使用、文本编码及 fill-mask 等任务实现,对比 PyTorch/TensorFlow 框架差异。接着展示 Hugging Face 社区模型应用,包括 GPT-2 文本生成和零样本分类。最后扩展至多模态领域,使用 CLIP 模型实现零样本图像分类。

盼小辉丶的博客 1万+

C++类与对象--继承(详细讲解)

C++面向对象三大特征之一---继承

脑子不好的小菜的博客 1359

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

C++:继承__易错点__附带详细讲解(隐藏规则中的坑、继承中需要深拷贝时,子类中构造函数的实现方式、实现一个不能被继承的类、多继承中指针偏移问题、继承概念和定义的题目、继承方式的题目、继承权限的题)

摘要:本文系统讲解了C++继承中的关键知识点,包括隐藏规则(父子类同名函数构成隐藏而非重载)、深拷贝实现(子类构造函数需显式调用父类构造)、不可继承类实现(C++98私有构造/C++11 final关键字)、多继承指针偏移问题(切片规则)、继承权限(struct默认public继承)以及构造/析构顺序(先父后子构造,先子后父析构)。通过典型例题解析揭示了继承中的易错点,如默认构造调用条件、同名隐藏机制等,并提供了变式练习强化理解。文中特别强调继承与组合的应用场景区分,以及派生类对象模型的内存布局特点。

2301_81265126的博客 1047

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

c++类继承

继承是一种简化代码的手段之一,使代码可以实现复用。它允许在原来类的功能上进行扩展,衍生出新的功能。也可以把多个类的基本信息提取到某个类,减少代码的冗余。其中被继承的类通常叫做父类或基类,继承下来的类叫做子类或派生类。...

dtxew love c++ 4694

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

C++的类与对象详细讲解

类在C++中用class这个关键字来定义。访问权限属性和行为。访问权限,顾名思义,决定了能否访问类中的一些变量和函数,和C语言中的指针有重合也有不同,C语言的指针通过类型的不同,使得访问的地址内容有所区别。在C++中,访问权限由几个关键字决定。属性,你可以想象一个苹果有颜色、重量、体积等等,这些就是它的属性。在C++中,属性用变量来表示。行为,每个事物都有一些行为,比如人,会走路、会吃饭。在C++中,行为由函数实现。//访问权限public://属性int num;//行为。

江塘的博客 1874

c++类全面讲解

这次主要讲类的基础、构造函数与析构函数的使用,以及继承和多态。这次从类的基础知识开始,讲了构造函数、析构函数、以及类的成员变量和方法。接着,讲了重载构造函数、拷贝构造函数、赋值运算符以及静态成员。然后讲了继承、多态、友元类和友元函数。最后模板类的概念,还有一些高级特性的基本概念。

shopeeai的博客 2092

C++类和继承

C++与C语言类似,运算效率高,与java也有相似之处 一:基础 1.输入:C语言中使用scanf来输入,需要声明变量的类型,头文件include。                C++中只需要“cin>>变量”即可实现,头文件include。 2.输出:C语言输出用printf执行,也需要声明变量的类型。                C++用“cout 二:类与继承 类在

chuck001002004的博客 1492

c++继承中的内存布局

 今天在网上看到了一篇写得非常好的文章,是有关c++类继承内存布局的。看了之后获益良多,现在转在我自己的博客里面,作为以后复习之用。 ——谈VC++对象模型(美)简.格雷程化    译 译者前言 一个C++程序员,想要进一步提升技术水平的话,应该多了解一些语言的语意细节。对于使用VC++的程序员来说,还应该了解一些VC++对于C++的诠释。 Inside the C++ Object

cesc 1万+

第十七节 C++ 类 & 对象、C++ 继承

第十七节 C++ 类 & 对象、C++ 继承

2501_92886572的博客 811

类的继承与派生

类及对象的访问权限: 类中的成员函数可以直接访问类中的数据成员(包括私有成员、公有成员、保护成员); 类中的成员函数可以相互访问; 类的对象只能访问类的公有成员,不能访问私有成员及保护成员。 一、继承与派生 在C++中,类具有继承性,所谓继承就是在一个已存在的类的基础上建立一个新的类。 利用类的继承,可以将原来的程序代码重复使用,从而减少了程序代码的冗余度,符合软件重用的目标。增强编程语言的功能。提高软件开发效率。 在继承关系中,被继承的类称为基类(或父类),把通过继承关......

swint_er的博客 9553
上一篇: [as3]使用声音
下一篇: 四大IT博客网公布全球19家最佳创业公司
wx红杉树
博客等级 码龄21年 383粉丝 296原创
评论 10
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值