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

news2024/11/25 14:55:58

文章目录

  • 一、继承的一些重要特性
    • 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.coloradmin.cn/o/1089794.html

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

相关文章

海外代理高性价比推荐——精选list

做跨境电商的都明白&#xff0c;无论运营店铺还是社媒账号&#xff0c;都需要海外代理&#xff0c;而在市场上海外的代理很多&#xff0c;到底什么才是适合自己呢&#xff1f;下面我进行测评后整理列出了一份稳定&#xff0c;高性价比好用的几款海外代理。 1、IPFoxy全球代理I…

NeurIPS 2023 | MQ-Det: 首个支持多模态查询的开放世界目标检测大模型

目前的开放世界目标检测模型大多遵循文本查询的模式&#xff0c;即利用类别文本描述在目标图像中查询潜在目标。然而&#xff0c;这种方式往往会面临“广而不精”的问题。一图胜千言&#xff0c;为此&#xff0c;作者提出了基于多模态查询的目标检测&#xff08;MQ-Det&#xf…

postman接口测试

HTTP的接口测试工具有很多&#xff0c;可以进行http请求的方式也有很多&#xff0c;但是可以直接拿来就用&#xff0c;而且功能还支持的不错的&#xff0c;我使用过的来讲&#xff0c;还是postman比较上手。 优点&#xff1a; 1、支持用例管理 2、支持get、post、文件上传、响…

解决modprobe加载驱动问题

一、insmod与modprobe 在Linux中&#xff0c;linux设备驱动有两种加载方式insmod和modprobe。 insmod insmod是一个加载模块的命令&#xff0c;但和modprobe不同的是&#xff0c;insmod不会自动加载依赖的模块。如果你需要加载的模块有依赖关系&#xff0c;那么你需要手动一个…

linux进阶-ipc信号(软中断信号)

信号 信号&#xff08;软中断信号&#xff09;&#xff0c;用于通知进程发生了异步事件&#xff08;它是Linux系统响应某些条件而产生的一个事件&#xff0c;它是在软件层次上对中断机制的一种模拟&#xff0c;是一种异步通信的方式&#xff0c;在原理上&#xff0c;一个进程收…

基于springboot实现外卖点餐平台系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现外卖点餐平台系统演示 摘要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势社会的发展和科学技术的进步&#xff0c;互联网技术越来越受欢迎。网络计算机的生活方式逐渐受到广大人民群众的喜…

(Vue3)大事记管理系统 首页 文章分类页

首页 先搭架子-用element-ui中的组件&#xff1a;container组件、layout组件 不知道的属性学会看文档&#xff01; :default-active"$route.path" 配默认高亮菜单项 $route.path 字符串&#xff0c;等于当前路由对象的路径&#xff0c;如“/home/news $route…

互联网Java工程师面试题·Java 并发编程篇·第四弹

目录 39、volatile 有什么用&#xff1f;能否用一句话说明下 volatile 的应用场景&#xff1f; 40、为什么代码会重排序&#xff1f; 41、在 java 中 wait 和 sleep 方法的不同&#xff1f; 42、用 Java 实现阻塞队列 43、一个线程运行时发生异常会怎样&#xff1f; 44、…

网站如何应对网络流量攻击

网络安全问题中&#xff0c;受到流量攻击是一种常见挑战。以下是一系列的专业建议&#xff0c;帮助您预防和减轻这类攻击&#xff0c;从而确保您的网站和数据的安全。 使用 Web 应用程序防火墙 (WAF) Web 应用程序防火墙是一项专门的安全工具&#xff0c;能够检测和拦截恶意流…

深入篇【C++】总结智能指针的使用与应用意义(auto_ptr/unique_ptr/shared_ptr/weak_ptr)底层原理剖析+模拟实现

深入篇【C】总结智能指针的使用与应用意义&&(auto_ptr/unique_ptr/shared_ptr/weak_ptr&#xff09;底层原理剖析模拟实现 智能指针的出现智能指针的使用应用意义/存在问题智能指针原理剖析模拟实现auto_ptrunique_ptrshared_ptrweak_ptr 智能指针的出现 首先我们要理…

【PCIE733】基于PCI Express总线架构的2路160MSPS AD采集、12路LVDS图像数据采集卡

PCIE733是一款基于PCI Express总线架构的&#xff0c;实现2路16-bit、160MSPS ADC采集功能、12路LVDS数据采集板卡。该板卡遵循PCI Express 2.0规范&#xff0c;全高半长尺寸&#xff0c;板卡采用Xilinx的28nm高性能FPGA处理器XC7K325T作为主控制器&#xff0c;板卡ADC器件采用…

【Jenkins】调用API构建并钉钉通知

文章目录 Jenkins API介绍提交作业带参数的作业API 令牌 Shell调用代码 Jenkins API介绍 Jenkins 提供了远程访问 API。目前它有三种格式&#xff1a; XML JSON Python 远程访问 API 形式为"…/api/" 例如&#xff0c; Jenkins 安装位于https://ci.jenkins.io&a…

day05-前后端项目上传到gitee、后端多方式登录接口、发送短信功能、发送短信封装、短信验证码接口、短信登录接口

1 前后端项目上传到gitee 2 后端多方式登录接口 2.1 序列化类 2.2 视图类 2.3 路由 3 发送短信功能 4 发送短信封装 4.0 目录结构 4.1 settings.py 4.2 sms.py 5 短信验证码接口 6 短信登录接口 6.1 视图类 6.2 序列化类 1 前后端项目上传到gitee # 我们看到好多开源项目…

协同育人|电巢携手武汉软件工程职业学院项目实训顺利开班!

为深化校企合作&#xff0c;产教融合助力新工科建设&#xff0c;提升学生工程实践能力&#xff0c;电巢工程能力实训班按照不同岗位类别&#xff0c;匹配对应的企业岗位任职能力要求对学生开展分级培养&#xff0c;以产业需求为导向&#xff0c;培养创新型、应用型人才。 10月…

新手小白学自动化测试必须要知道的知识!

1、为什么要进行自动化测试&#xff1f; ①黑盒测试回归效率低&#xff1b; ②手动测试的偶然性和不确定性&#xff1b; ③回归的覆盖率不足&#xff1b; ④交付的产品质量无法保证&#xff0c;全靠评估&#xff1b; ⑤系统越复杂&#xff0c;问题越多&#xff1b; ⑥上线…

14私有化属性的意义

目录 私有化属性有两个意义&#xff0c;一个是数据保护&#xff0c;一个是数据过滤 一、数据保护 二、数据过滤 私有化属性有两个意义&#xff0c;一个是数据保护&#xff0c;一个是数据过滤 一、数据保护 class Person:def __init__(self):self.__age 10pass p1 Person(…

windows安装nvm以及解决yarn问题

源代码 下载 下一步一下步安装即可 检查是否安装成功 nvm出现上面的代码即可安装成功 常用命令 查看目前安装的node版本 nvm list [available]说明没有安装任何版本&#xff0c;下面进行安装 nvm install 18.14使用该版本 node use 18.14.2打开一个新的cmd输入node -…

Excel 从网站获取表格

文章目录 导入网站数据导入股票实时行情 用 Excel 获取网站数据的缺点&#xff1a;只能获取表格类的数据&#xff0c;不能获取非结构化的数据。 导入网站数据 转到地址之后&#xff1a; 实测该功能经常导致 Excel 卡死。 导入股票实时行情

Observability:使用 Elastic Observability 摄取和分析 Prometheus 指标

作者&#xff1a;Jenny Morris 在监控和可观察性领域&#xff0c;Prometheus 凭借其强大的数据收集机制、灵活的查询功能以及与其他工具的集成以实现丰富的仪表板和可视化&#xff0c;已成长为云原生环境中监控的事实上的标准。 Prometheus 主要是为短期指标存储而构建的&…

软件工程与计算总结(十)软件体系结构设计与构建

目录 ​编辑 一.体系结构设计过程 1.分析关键需求和项目约束 2.选择体系结构风格 3.体系结构逻辑设计 4.体系结构实现 5.完善体系结构设计 6.定义构件接口 二.体系结构原型构建 1.包的创建 2.重要文件的创建 3.定义构件之间的接口 4.关键需求的实现 三.体系结构的…