【C++】继承 ③ ( 继承的一些重要特性 | 子类拥有父类的所有成员 | 多态性 | 子类可以拥有父类没有的成员 | 代码示例 )

文章目录

  • 一、继承的一些重要特性
    • 1、子类拥有父类的所有成员
    • 2、子类可以拥有父类没有的成员
    • 3、多态性
  • 二、代码示例





一、继承的一些重要特性




1、子类拥有父类的所有成员


子类 继承 父类 , 则 子类 拥有 父类的 所有 成员变量 和 成员函数 ;

这里要注意 : 子类 拥有 父类的 私有成员 , 但是 子类不能 直接访问 父类 的 私有成员 , 必须通过 父类的 公有或受保护 的成员函数 访问 父类的 私有成员 ;


子类 不能访问 父类的 私有成员 , 并不代表 子类 中没有 父类的 私有成员 ;


下面的 Parent 父类中 , 定义了私有成员函数 privateFun ;

如果 Child 子类 继承上述 Parent 父类 , 子类中 无法直接调用 privateFun 函数 ;


如果在父类中 , 定义一个 共有成员函数 callPrivateFun 函数 , 调用 privateFun 私有函数 ;

此时 , 在 子类中 , 可以通过调用 callPrivateFun 函数 , 间接调用 父类的 privateFun 私有函数 ;


代码示例 :

class Parent {
public:void publicFun() {cout << "父类公有成员" << endl;}void callPrivateFun(){privateFun();cout << "通过父类公有函数 调用 父类私有成员" << endl;}protected:void protectedFun() {cout << "父类保护成员" << endl;}private:void privateFun() {cout << "父类私有成员" << endl;}
};

Child 子类 继承上述 Parent 父类 , 通过 父类 callPrivateFun 函数间接调用 父类的 私有成员 ;

    Child c;c.publicFunChild();// 间接调用父类的 私有成员c.callPrivateFun();

2、子类可以拥有父类没有的成员


子类 可以 在 继承自 父类 的 成员变量 和 成员函数 基础上 , 定义 其它的 成员变量 和 成员函数 ;

因此 , 子类 可以 拥有 父类 所没有的 成员变量 和 成员函数 ;


在下面的代码中 , Parent 是父类 , Child 是子类 ;

父类中有 publicFun , protectedFun , privateFun 三个成员方法 ;

子类中包含父类的所有成员 , 即包含上面的 publicFun , protectedFun , privateFun 三个成员方法 ,

此外 , 子类还在上面的基础上 , 又定义了 publicFunChild 方法 ;

class Parent {
public:void publicFun() {cout << "父类公有成员" << endl;}protected:void protectedFun() {cout << "父类保护成员" << endl;}private:void privateFun() {cout << "父类私有成员" << endl;}
};// 子类 公有继承 父类
class Child : public Parent {
public:void publicFunChild() {// 子类 可以访问 父类 的公有成员 publicFun();   // 子类 可以访问 父类 的保护成员 protectedFun();// 任何类型的继承 都不能访问 父类的私有成员//privateFun();}
};

3、多态性


子类 可以 当做 父类 使用 , 子类 是 特殊的 父类 ;


在下面的代码中 , 定义了 父类 Parent 类型的变量 , Parent c2 ;

使用 Child c 对象 , 为 Parent c2 进行初始化赋值 , 代码为 Parent c2 = c , 该操作执行正常 , 并没有报错 ;

调用 c2.publicFun() 代码 , 访问 父类的 publicFun 函数 , 该操作正常执行 ;

说明 子类对象 可以当做 父类对象 使用 ;


注意 : 如果 使用 子类对象 为 父类对象 进行初始化 , 则该对象 不能调用 子类独有的成员;


部分代码示例 : 父类 与 子类 的代码 , 参考上面的章节的 Parent 父类 和 Child 子类 代码 ;

    Child c;c.publicFunChild();Parent c2 = c;c2.publicFun();// c2 不能访问子类的成员//c2.publicFunChild();




二、代码示例



代码示例 :

#include "iostream"
using namespace std;#include <iostream>  class Parent {
public:void publicFun() {cout << "父类公有成员" << endl;}void callPrivateFun(){privateFun();cout << "通过父类公有函数 调用 父类私有成员" << endl;}protected:void protectedFun() {cout << "父类保护成员" << endl;}private:void privateFun() {cout << "父类私有成员" << endl;}
};// 子类 公有继承 父类
class Child : public Parent {
public:void publicFunChild() {// 子类 可以访问 父类 的公有成员 publicFun();   // 子类 可以访问 父类 的保护成员 protectedFun();// 任何类型的继承 都不能访问 父类的私有成员//privateFun();}
};int main() {Child c;c.publicFunChild();// 间接调用父类的 私有成员c.callPrivateFun();Parent c2 = c;c2.publicFun();// c2 不能访问子类的成员//c2.publicFunChild();// 控制台暂停 , 按任意键继续向后执行system("pause");return 0;
}

执行结果 :

父类公有成员
父类保护成员
父类私有成员
通过父类公有函数 调用 父类私有成员
父类公有成员
Press any key to continue . . .

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python中使用IDLE调试程序

在IDLE中&#xff0c;使用菜单栏中的“Debug”对IDLE打开的python程序进行调试。 1 打开调试开关 选择IDLE菜单栏的“Debug->Debugger”&#xff0c;如图1①所示&#xff1b;此时在IDLE中会显示“[DEBUG ON]”&#xff0c;即“调试模式已打开”&#xff0c;如图1②所示&am…

【使用 TensorFlow 2】03/3 创建自定义损失函数

一、说明 TensorFlow 2发布已经接近5年时间&#xff0c;不仅继承了Keras快速上手和易于使用的特性&#xff0c;同时还扩展了原有Keras所不支持的分布式训练的特性。3大设计原则&#xff1a;简化概念&#xff0c;海纳百川&#xff0c;构建生态.这是本系列的第三部分&#xff0c;…

区块链加密虚拟货币交易平台安全解决方案

区块链机密货币交易锁遭入侵&#xff0c;安全存在隐患。使用泰雷兹Protect server HSM加密机&#xff0c;多方位保护您的数据&#xff0c;并通过集中化管理&#xff0c;安全的存储密钥。 引文部分&#xff1a; 损失7000万美元!黑客入侵香港区块链加密货币交易所 2023年9月&…

如何在Ubuntu 20.04.6 LTS系统上运行Playwright自动化测试

写在前面 这里以 Ubuntu 20.04.6 LTS为例。示例代码&#xff1a;自动化测试代码。 如果过程中遇到其他非文本中提到的错误&#xff0c;可以使用搜索引擎搜索错误&#xff0c;找出解决方案&#xff0c;再逐步往下进行。 一、 环境准备 1.1 安装python3 1.1.1 使用APT安装Py…

【Hello Algorithm】暴力递归到动态规划(二)

暴力递归到动态规划&#xff08;二&#xff09; 背包问题递归版本动态规划 数字字符串改字母字符串递归版本动态规划 字符串贴纸递归版本动态规划 **特别需要注意的是 我们使用数组之前一定要进行初始化 不然很有可能会遇到一些意想不到的错误 比如说在Linux平台上 new出来的in…

记一次生产大对象及GC时长优化经验

最近在做一次系统整体优化,发现系统存在GC时长过长及JVM内存溢出的问题,记录一下优化的过程 面试的时候我们都被问过如何处理生产问题&#xff0c;尤其是线上oom或者GC调优的问题更是必问&#xff0c;所以到底应该如何发现解决这些问题呢&#xff0c;用真实的场景实操&#xff…

2015架构案例(五十一)

第5题 【说明】某信息技术公司计划开发一套在线投票系统&#xff0c;用于为市场调研、信息调查和销售反馈等业务提供服务。该系统计划通过大量宣传和奖品鼓励的方式快速积累用户&#xff0c;当用户规模扩大到一定程度时&#xff0c;开始联系相关企业提供信息服务&#xff0c;并…

批量执行insert into 的脚本报2006 - MySQL server has gone away

数据库执行批量数据导入是报“2006 - MySQL server has gone away”错误&#xff0c;脚本并没有问题&#xff0c;只是insert into 的批量操作语句过长导致。 解决办法&#xff1a; Navicat ->工具 ->服务器监控->mysql ——》变量 修改max_allowed_packet大小为512…

TCP/IP(七)TCP的连接管理(四)全连接

一 全连接队列 nginx listen 参数backlog的意义 nginx配置文件中listen后面的backlog配置 ① TCP全连接队列概念 全连接队列: 也称 accept 队列 ② 查看应用程序的 TCP 全连接队列大小 实验1&#xff1a; ss 命令查看 LISTEN状态下 Recv-Q/Send-Q 含义附加&#xff1a;…

【Java学习之道】日期与时间处理类

引言 在前面的章节中&#xff0c;我们介绍了Java语言的基础知识和核心技能&#xff0c;现在我们将进一步探讨Java中的常用类库和工具。这些工具和类库将帮助我们更高效地进行Java程序开发。在本节中&#xff0c;我们将一起学习日期与时间处理类的使用。 一、为什么需要日期和…

vsCode 忽略 文件上传

1 无 .gitignore 文件时&#xff0c;在项目文件右键&#xff0c;Git Bash 进入命令行 输入 touch .gitignore 生成gitignore文件 2 、在文件.gitignore里输入 node_modules/ dist/ 来自于&#xff1a;vscode git提交代码忽略node_modules_老妖zZ的博客-CSDN博客

k8s - Flannel

1.Flannel概念剖析 Flannel是 CoreOS 团队针对 Kubernetes 设计的一个覆盖网络&#xff08;Overlay Network&#xff09;工具&#xff0c;其目的在于帮助每一个使用 Kuberentes 的 CoreOS 主机拥有一个完整的子网。这次的分享内容将从Flannel的介绍、工作原理及安装和配置三方…

④. GPT错误:导入import pandas as pd库,存储输入路径图片信息存储错误

꧂ 问题最初꧁ 用 import pandas as pd 可是你没有打印各种信息input输入图片路径 print图片尺寸 大小 长宽高 有颜色占比>0.001的按照大小排序将打印信息存储excel表格文件名 表格路径 图片大小 尺寸 颜色类型 占比信息input输入的是文件就处理文件 是文件夹&#x1f4c…

44.ES

一、ES。 &#xff08;1&#xff09;es概念。 &#xff08;1.1&#xff09;什么是es。 &#xff08;1.2&#xff09;es的发展。 es是基于lucene写的。 &#xff08;1.3&#xff09;总结。 es是基于lucene写的。 &#xff08;2&#xff09;倒排索引。 &#xff08;3&#xf…

flutter 开发中的问题与技巧

一、概述 刚开始上手 flutter 开发的时候&#xff0c;总会遇到这样那样的小问题&#xff0c;而官方文档又没有明确说明不能这样使用&#xff0c;本文总结了一些开发中经常会遇到的一些问题和一些开发小技巧。 二、常见问题 1、Expanded 组件只能在 Row、Column、Flex 中使用 C…

GEE:基于GLDAS数据集分析土壤湿度的时间序列变化

作者:CSDN @ _养乐多_ 本篇博客将介绍如何使用Google Earth Engine(GEE)进行土壤湿度数据的分析。我们将使用NASA GLDAS(Global Land Data Assimilation System)数据集,其中包括了关于土壤湿度的信息。通过该数据集,我们将了解土壤湿度在特定区域和时间段内的变化,并生…

springboot vue 部署至Rocky(Centos)并自启,本文部署是若依应用

概述 1、安装nohup&#xff08;后台进程运行java&#xff09; 2、安装中文字体&#xff08;防止中文乱码&#xff09; 3、安装chrony&#xff08;保证分布式部署时间的一致性&#xff09; 5、安装mysql数据&#xff0c;迁移目录&#xff0c;并授权自启动&#xff1b; 6、安…

SpringBoot注解篇之@Validated

目录 前言Validated作用NotNull与NotBlank区别总结 前言 大家好&#xff0c;我是AK&#xff0c;在做新项目顺便整理SpringBoot相关内容&#xff0c;这里主要介绍下Validated注解的应用&#xff0c;减少核心业务逻辑中一些参数判断的代码。 Validated作用 Validated 是 Spring…

Linux友人帐之系统管理与虚拟机相关

一、虚拟机相关操作 1.1虚拟机克隆 虚拟机克隆是指将一个已经安装好的虚拟机复制出一个或多个完全相同的副本&#xff0c;包括虚拟机的配置、操作系统、应用程序等&#xff0c;从而节省安装和配置的时间和资源。 虚拟机克隆的主要用途有&#xff1a; 创建多个相同或相似的虚拟…

论文导读|八月下旬Operations Research文章精选:定价问题专题

编者按&#xff1a; ​ ​在“ Operations Research论文精选”中&#xff0c;我们有主题、有针对性地选择了Operations Research中一些有趣的文章&#xff0c;不仅对文章的内容进行了概括与点评&#xff0c;而且也对文章的结构进行了梳理&#xff0c;旨在激发广大读者的阅读兴…