继承和派生

🐶博主主页:@ᰔᩚ. 一怀明月ꦿ 

❤️‍🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C++

🔥座右铭:“不要等到什么都没有了,才下定决心去做”

🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀

目录

🐰继承和派生的概念

🐰派生类的声明

🐰派生类的构成

🌸1.从基类接受成员

🌸2.调整从基类接受的成员

🌸3.增加新成员

🐰派生类中基类成员的访问属性

🌸公用继承:

🌸私有继承:

🌸受保护的继承:

🐰总结


🐰继承和派生的概念

面向对象的设计有四个重要的特征:抽象,封装,继承和多态性

所谓的“继承”就是在一个或多个已存在的类的基础上建立一个新的类。已存在的类称为“基类”“父类”或“一般类”。新建立的类称为“派生类”“子类”或“特殊类”

“基类”和“派生类”是相对而言的。一个基类可以派生出多个派生类,每一个派生类又可以作为基类派生出新的派生类。

🐰派生类的声明

单继承派生类的声明:

Class 派生名:继承方式 基类名
{
    派生类新加的成员
};

其中,继承方式可以是public,protected,private,分别对应公有继承,受保护继承,私有继承。此项可选的,如果不写此项,则默认为private。

🐰派生类的构成

派生类中的成员保括从基类继承过来的成员和自己新增加的成员两大部分,从基类继承过来的成员体现了派生类从基类继承而获得的共性,而新增加的成员体现了派生类的个性。

🌸1.从基类接受成员

派生类要接收基类全部的成员(但不包括基类的构造函数和析构函数)也就是说没机会选择的,不能选择接受一部分,而舍弃一部分。 

🌸2.调整从基类接受的成员

虽然派生类对基类成员的继承是没有选择的全部继承。但我们对成员做出调整。(1)可以改变基类成员在派生类的访问属性,这是通过指定继承方式来实现的,如果在声明派生类时指定继承方式是私有的,则基类中的公有成员和受保护成员在派生类中的访问属性就是私有的,在派生类外不能访问。(2)可以在派生类中声明一个与基类成员同名的成员,则派生类的新成员会屏蔽与其同名的基类成员。

🌸3.增加新成员

这体现了对基类功能的扩展,在声明派生类时,还应该定义派生类的构造函数和析构函数,因为构造函数和析构函数是不能从基类继承的。

🐰派生类中基类成员的访问属性

派生类中基类成员的访问属性不仅与在声明基类时所声明的访问属性有关,而且与在声明派生类时所指定的对基类继承方式,以及类内using声明语句的使用情况有关

🌸公用继承:

基类的公用成员和受保护成员在派生类中保持原有的访问属性,其私有成员仍为基类私有(派生类不可访问)

🌸私有继承:

基类的公用成员和受保护成员在派生类中成了私有成员,其私有成员仍为基类私有(派生类不可访问)

🌸受保护的继承:

基类的公用成员和受保护成员在派生类中成了受保护成员,其私有成员仍为基类私有(派生类不可访问)

受保护成员的意思:不能被外界访问,但可以被派生类的成员访问

公用继承:

采用公用继承的方式时,基类的公用成员和受保护成员在派生类中保持原有的访问属性,而基类的私有成员在派生类中并没有成为派生类的私有成员,它还是基类的私有成员,只有基类的成员函数可以访问它,而不能被派生类的成员函数访问,因此就成为派生类中的不可访问的成员

 

私有继承:

私有基类的公用成员和受保护成员在派生类中的访问属性相当于派生类的私有成员,即派生类的成员函数能访问它们,而在派生类外不能访问它们。私有基类的私有成员在派生类中成为不可访问的成员,只有基类的成员函数可以访问它们。

保护成员和保护继承:

在声明一个派生类时对基类的继承方式指定为protected的,成为保护继承,用保护继承方式建立的派生类称为保护派生类,其基类称为受保护的基类,也称保护基类。

保护继承的特点:保护基类的公用成员和保护成员在派生类中都成了保护成员,而基类的私有成员在派生类中并没有成为派生类的私有成员,它还是基类的私有成员。也就是把基类原有的公用成员也保护起来,不让类外访问。

🐰总结

1.派生类中,成员有四种不同的访问属性 

(1)公用的:派生类内外都可以访问。

(2)受保护的:派生类内可以访问,派生类外不能访问,其下一层的派生类可以访问(公用继承)

(3)私有的:派生类内可以访问,派生类外不能访问。

(4)不可访问的:派生类内外都不可以访问。

 

注意:

(1)这里列出的成员的访问属性是指在派生类中所获得的访问属性

2)所谓的派生类外部,是指在建立派生类对象的模块中,在派生类范围之外

(3)如果本派生类继续派生,则在不同的继承方式下,成员所获得的访问属性是不同的。

2.类的成员在不同作用域有不同的访问属性。

在学习过派生类之后,再讨论一个类的某成员的访问属性,一个要指明是在哪一个作用域中。如基类Circle的成员函数seRadius,它在基类中的访问属性是公用的,在私有派生类Cylinder中的访问属性私有的。

比较私有继承和保护继承,可以发现,直接派生类中,以上两种继承方式的作用实际上是相同的:在类外不能访问基类中的任何成员,而在派生类中可以通过成员函数访问基类中的公用成员和保护成员。但如果继续派生,在新派生类中,两种继承方式的作用就不同了。例如,如果以公用继承方式派生出一个新派生类,原有私有基类中的成员在新派生类中都成为不可访问的成员,无论在新派生类内或外都不可能访问,而原来保护基类中的公用成员和保护成员在新派生类中为保护成员,可以被新派生类的成员函数访问。

有时我们需要改变派生类继承得基类某个成员的可访问性,通过使用using声明。

#include<iostream>
using namespace std;
class Base
{
public:
    size_t size() const
    {
        return n;
    }
protected:
    size_t n=0;
};
class Derived:private Base
{
public:
    using Base::size;
protected:
    using Base::n;
};
int main()
{
    Derived s1;
    cout<<s1.size()<<endl;
    return 0;
}
结果为:0

🌸🌸🌸如果大家还有不懂或者建议都可以发在评论区,我们共同探讨,共同学习,共同进步。谢谢大家! 🌸🌸🌸    

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

手撕数据结构—队列

队列队列的话只允许在一端插入&#xff0c;在另外一端删除。插入数据的那一段叫做队尾&#xff0c;出数据的那一段叫做队头&#xff08;从尾巴插入&#xff09;。因此的话队列是先进先出的。入的顺序与出的顺序的话是一样的。这个与栈是不一样的&#xff0c;因为栈的话就是说如…

问题【Java 基础】

基础1、成员变量与局部变量的区别2、静态变量有什么作用3、字符型常量和字符串常量的区别4、静态方法为什么不能调用非静态成员5、静态方法和实例方法有何不同6、重载和重写有什么区别7、什么是可变长参数8、Java 中的几种基本数据类型了解么9、基本类型和包装类型的区别10、包…

【数据结构】树和二叉树的概念及结构

目录 1.树概念及结构 1.1 树的概念 1.2 树的相关概念 1.3树的表示 1.4 树在实际中的应用 2.二叉树概念及结构 2.1 概念 2.2 特殊的二叉树 2.2.1 满二叉树 2.2.2 完全二叉树 1.树概念及结构 1.1 树的概念 树是一种非线性的数据结构&#xff0c;它是由n(n>0) 个有…

一款专门为自动化测试打造的集成开发工具【Aqua】,“能快速构建自动化测试项目”,就问你爽不爽吧,,,

你好&#xff0c;我是不二。 随着行业内卷越来越严重&#xff0c;自动化测试已成为测试工程师的必备技能&#xff0c;谈及自动化测试肯定少不了编程&#xff0c;说到编程肯定离不开集成开发工具&#xff0c;比如&#xff1a;IntelliJ IDEA可以帮助我们快速构建Maven项目、sprin…

前端已死?后端已亡?弯弯绕绕,几分真几分假

前段时间&#xff0c;我在掘金分享了一篇GPT-4 性能文章&#xff0c;也许是过于强大带来的威胁性&#xff0c;引来评论区的排队哀嚎&#xff08;如下图&#xff09;&#xff0c;所以“前端已死&#xff0c;后端已亡”这个概念真的成立吗&#xff1f;本文着重探讨前端。 前端和后…

警惕,3月20日WOS目录更新,50本SCI/SSCI被剔除,这个出版社多达18本

2023年3月SCI、SSCI期刊目录更新 2023年3月20日&#xff0c;Web of Science核心期刊目录再次更新&#xff01;此次2023年3月SCIE & SSCI期刊目录更新&#xff0c;与上次更新&#xff08;2023年2月&#xff09;相比&#xff0c;共有50本期刊被剔除出SCIE & SSCI期刊目录…

[ 网络 ] 应用层协议 —— HTTP协议

目录 1.HTTP协议 1.1URL urlencode和urldecode 2. HTTP协议格式 HTTP请求 HTTP响应 3.告知服务器意图的HTTP方法 GET&#xff1a;获取资源 POST&#xff1a;传输实体主体 GET和POST的区别 使用Cookie的状态管理 4.返回结果的HTTP状态码 状态码告知从服务器端返回的…

三月份跳槽了,历经字节测开岗4轮面试,不出意外,被刷了...

大多数情况下&#xff0c;测试员的个人技能成长速度&#xff0c;远远大于公司规模或业务的成长速度。所以&#xff0c;跳槽成为了这个行业里最常见的一个词汇。 前几天&#xff0c;我看到有朋友留言说&#xff0c;他在面试字节的测试开发工程师的时候&#xff0c;灵魂拷问三小…

【Shell】脚本

Shell脚本脚本格式第一个Shell脚本&#xff1a;hello.sh脚本常用执行方式1. bash或sh脚本的相对路径或绝对路径2. 输入脚本的绝对路径或相对路径3. 在脚本的路径前加上.或者source脚本格式 脚本以#!/bin/bash开头&#xff08;指定解析器&#xff09; #! 是一个约定的标记&…

让 new bing 使用 GPT-4 编写一个令人满意的程序全过程赏析

让 new bing 使用 GPT-4 编写一个令人满意的程序全过程赏析 标签&#xff1a;new bing、GPT-4 文章目录让 new bing 使用 GPT-4 编写一个令人满意的程序全过程赏析前言1 让 bing 编写一个画螺旋线的程序1.1 我的要求&#xff08;1&#xff09;1.2 bing 的回答全文&#xff08;…

p81 红蓝对抗-AWD 监控不死马垃圾包资源库

数据来源 注意&#xff1a;一下写的东西是在p80 红蓝对抗-AWD 模式&准备&攻防&监控&批量这篇文章的基础上进行的 演示案例&#xff1a; 防守-流量监控-实时获取访问数据包流量 攻击-权限维持-不死脚本后门生成及查杀 其他-恶意操作-搅屎棍发包回首掏共权限…

WPF 认识WPF

什么是WPF?WPF是Windows Presentation Foundation(Windows展示基础)简称&#xff0c;顾名思义是专门编写表示层的技术。WPF绚丽界面如下&#xff1a;GUI发展及WPF历史&#xff1f;Windows系统平台上从事图形用户界面GUI(Graphic User Interface)已经经历了多次换代&#xff0c…

web前端开发和后端开发哪个难度大?

前言 因为涉及到的具体的应用的领域不同&#xff0c;所以说不能简单地说哪一个难&#xff0c;对于前端而言你会感觉到入门会非常的简单&#xff0c;这也是会给许多人一种错觉&#xff0c;前端很简单&#xff0c;但是只能说是在入门理解上是有利于新手的&#xff0c;前端在主要…

二叉树系统刷题1

文章目录**BM26** **求二叉树的层序遍历****BM27** **按之字形顺序打印二叉树****BM28** **二叉树的最大深度****BM29** **二叉树中和为某一值的路径(一)****BM30** **二叉搜索树与双向链表****BM31** **对称的二叉树****BM32** **合并二叉树****BM34** **判断是不是二叉搜索树…

【数据结构】KMP算法细节详解

KMP算法细节详解前言一、字符串匹配问题1.BF算法2.KMP算法二、next数组三、手写nex思想四、机算next思想五、next数组细节理解六、nextVal数组七、KMP算法代码实现八、nextVal数组代码实现完结前言 KMP算法是为了字符串匹配问题而被研究出来的&#xff0c;字符串匹配问题就是查…

真实的软件测试日常工作是咋样的?

最近很多粉丝问我&#xff0c;小姐姐&#xff0c;现在大环境不景气&#xff0c;传统行业不好做了&#xff0c;想转行软件测试&#xff0c;想知道软件测试日常工作是咋样的&#xff1f;平常的工作内容是什么&#xff1f; 别急&#xff0c;今天跟大家细细说一下一个合格的软件测…

【LeetCode每日一题】——面试题17.21.直方图的水量

文章目录一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【解题思路】七【时间频度】八【代码实现】九【提交结果】一【题目类别】 双指针 二【题目难度】 困难 三【题目编号】 面试题17.21.直方图的水量 四【题目描述】 给定一个直方图(也称…

Android Studio 中使用 Gradle 配置多渠道打包 配置不同的渠道名称 配置不同的App名称 配置不同的Logo

废话三种操作都是可以混合一起用的&#xff0c;本来也不是很难的事情&#xff0c;为了方便分别理解&#xff0c;这里我就分开处理了。如果需要将打包出来的apk的名称自动命名成指定格式&#xff0c;也可以进行配置&#xff0c;我这里没这个需求&#xff0c;所以这里就不讨论了。…

晶晨S905D3切换到外部phy方法

文章目录 前言一、s905d3的以太网驱动的理解二、修改设备树注意前言 随着芯片的国产化推荐,越来越多的国产芯片被大家重视起来,但是国产的一些稍微高性能的芯片资料太少,这里把调实phy的流程记录一下,不做太多的理论分析 一、s905d3的以太网驱动的理解 如果拿到sdk后,默…

ESP32设备驱动-ADXL335加速计驱动

ADXL335加速计驱动 文章目录 ADXL335加速计驱动1、ADXL335介绍2、硬件准备3、软件准备4、驱动实现1、ADXL335介绍 ADXL335 是一款小型、薄型、低功耗、完整的 3 轴加速度计,具有信号调理电压输出。 该产品以 3 g 的最小满量程测量加速度。它可以测量倾斜传感应用中的静态重力…