当前位置: 首页 > news >正文

C++学习 --类和对象之继承

目录

1, 继承的语法

1-1, 继承方式

1-1-1, 公共继承public

1-1-2, 私有继承private

1-1-3, 保护继承protected

2, 父类,子类同名属性处理

2-1, 成员变量同名

2-2, 成员函数同名

3, 多继承

4, 菱形问题


1, 继承的语法

通过class 子类:继承方式 父类, 可实现继承

class A : public B

1-1, 继承方式

继承方式分为, public、private、protected, 通过继承方式可决定继承的属性在子类的权限

1-1-1, 公共继承public

通过public方式继承父类属性与父类保持一致, 即父类public的属性, 子类也是public, 父类protected属性, 子类也是protected属性

class Son1 :public Base1
{
public:void func(){//m_a在父类中是public权限, 所以子类也是public权限, 可修改m_a = 100;//m_b在父类中是protected权限, 所以子类也是protected权限, 可修改m_b = 200;//m_c在父类中是private权限, 子类不能访问, 所以不能修改m_c = 300;}
};

1-1-2, 私有继承private

通过private方式继承父类属性, 在子类中都是private属性

class Son1 :private Base1
{
public:void func(){//m_a在父类中是public权限, 所以子类也是private权限, 可修改m_a = 100;//m_b在父类中是protected权限, 所以子类也是private权限, 可修改m_b = 200;//m_c在父类中是private权限, 子类不能访问, 所以不能修改m_c = 300;}
};

1-1-3, 保护继承protected

通过protected方式继承父类属性, 在子类中都是protected属性

class Son1 :protected Base1
{
public:void func(){//m_a在父类中是public权限, 所以子类也是protected权限, 可修改m_a = 100;//m_b在父类中是protected权限, 所以子类也是protected权限, 可修改m_b = 200;//m_c在父类中是private权限, 子类不能访问, 所以不能修改m_c = 300;}
};

说明:子类都不能访问父类的private权限属性

2, 父类,子类同名属性处理

2-1, 成员变量同名

当子类存在与父类同名的属性时, 通过对象.属性方式, 访问的是子类的属性, 要访问父类的属性, 需通过对象.父类::属性方式进行访问

//Base1是父类名称
cout << "子类属性访问m_a:" << s1.m_a << endl;
cout << "父类属性访问m_a:" << s1.Base1::m_a << endl;

2-2, 成员函数同名

当子类存在与父类同名的属性时, 通过对象.函数()方式, 访问的是子类的属性, 要访问父类的属性, 需通过对象.父类::函数()方式进行访问

//func()是子类父类同名的成员函数, Base1是父类名称
s1.func();
s1.Base1::func();

3, 多继承

通过class 子类:继承方式 父类1, ..., 继承方式, 父类n, 可实现多继承

//Base1, Base2为继承的基类
cout << "访问基类属性:"  << s1.m_a << endl;
cout << "访问Base1属性:" << s1.Base1::m_a << endl;
cout << "访问Base2属性:" << s1.Base2::m_a << endl;

4, 菱形问题

通过虚继承的方式, 可解决菱形问题, 语法为class 子类:virtual 继承方式 父类1, virtual 继承方式 父类2

//加上virtual就表示虚继承, 可解决菱形问题
class C :virtual public A, virtual public B

相关文章:

C++学习 --类和对象之继承

目录 1&#xff0c; 继承的语法 1-1, 继承方式 1-1-1&#xff0c; 公共继承public 1-1-2&#xff0c; 私有继承private 1-1-3&#xff0c; 保护继承protected 2&#xff0c; 父类&#xff0c;子类同名属性处理 2-1&#xff0c; 成员变量同名 2-2&#xff0c; 成员函数同…...

Redis之缓存

文章目录 前言一、缓存使用缓存的原因 二、使用缓存实现思路提出问题 三、三大缓存问题缓存穿透缓存雪崩缓存击穿互斥锁实现逻辑过期时间实现 总结 前言 本篇文章即将探索的问题&#xff08;以黑马点评为辅助讲解&#xff0c;大家主要体会实现逻辑&#xff09; 使用redis缓存的…...

Redis6的IO多线程分析

性能测试 机器配置 C Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 14 On-line CPU(s) list: 0-13 Mem: 62G性能 配置推荐 官方表示&#xff0c;当使用redis时有性能瓶…...

kali linux安装教程

安装 Kali Linux 非常简单&#xff0c;下面是基本的步骤&#xff1a; 首先下载 Kali Linux 的 ISO 镜像文件。你可以从官方网站 https://www.kali.org/downloads/ 下载。 确保你的计算机支持使用盘或者 USB 启动。你可以在计算机开机时按下 F12 或者其他类似的按键&#xff0c;…...

React进阶之路(四)-- React-router-v6、Mobx

文章目录 ReactRouter前置基本使用核心内置组件说明编程式导航路由传参嵌套路由默认二级路由404路由配置集中式路由配置 Mobx什么是Mobx环境配置基础使用observer函数*计算属性&#xff08;衍生状态&#xff09;异步数据处理模块化多组件数据共享Mobx和React职责划分 ReactRout…...

55基于matlab的1.高斯噪声2.瑞利噪声3.伽马噪声4.均匀分布噪声5.脉冲(椒盐)噪声

基于matlab的1.高斯噪声2.瑞利噪声3.伽马噪声4.均匀分布噪声5.脉冲&#xff08;椒盐&#xff09;噪声五组噪声模型&#xff0c;程序已调通&#xff0c;可直接运行。 55高斯噪声、瑞利噪声 (xiaohongshu.com)...

Codeforces Round 908 (Div. 2)视频详解

Educational Codeforces Round 157 &#xff08;A--D&#xff09;视频详解 视频链接A题代码B题代码C题代码D题代码 视频链接 Codeforces Round 908 (Div. 2)视频详解 A题代码 #include<bits/stdc.h> #define endl \n #define deb(x) cout << #x << "…...

电路综合-基于简化实频的SRFT集总参数切比雪夫低通滤波器设计

电路综合-基于简化实频的SRFT集总参数切比雪夫低通滤波器设计 6、电路综合-基于简化实频的SRFT微带线切比雪夫低通滤波器设计中介绍了使用微带线进行切比雪夫滤波器的设计方法&#xff0c;在此对集总参数的切比雪夫响应进行分析。 SRFT集总参数切比雪夫低通滤波器综合不再需要…...

Linux系统编程——实现cp指令(应用)

cp指令格式 cp [原文件] [目标文件] cp 1.c 2.c 功能是将原文件1.c复制后并改名成2.c(内容相同&#xff0c;实现拷贝) 这里需要引入main函数的参数解读&#xff1a; 我们在定义函数时许多都带有参数&#xff0c;输入参数后便可进行定义函数内的功能执行&#xff0c;而main…...

20231112_DNS详解

DNS是实现域名与IP地址的映射。 1.映射图2.DNS查找顺序图3.DNS分类和地址4.如何清除缓存 1.映射图 图片来源于http://egonlin.com/。林海峰老师课件 2.DNS查找顺序图 3.DNS分类和地址 4.如何清除缓存...

使用ssh上传数据到阿里云ESC云服务上

在这之前需要安装 ssh2-sftp-client 直接在终端输入&#xff1a;npm i ssh2-sftp-client 直接上代码&#xff1a; const path require(path); const Client require(ssh2-sftp-client);// 配置连接参数 const config {host: your-server-ip, // 云服务器的IP地址port: 22, …...

【408】计算机学科专业基础 - 数据结构

数据结构知识 绪论 数据结构在学什么 如何用程序代码把现实世界的问题信息化 如何用计算机高效地处理这些信息从而创造价值 数据结构的基本概念 什么是数据&#xff1a; 数据是信息的载体&#xff0c;是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程序…...

SpringSpringBoot自动装配

文章目录 spring自动装配的好处Spring框架提供了三种自动装配的方式&#xff1a;Springboot自动装配Springboot自动装配的原理 spring自动装配的好处 Spring的自动装配&#xff08;Autoscan or Autowiring&#xff09;在开发中带来了多方面的好处&#xff0c;使得应用程序更加…...

k8s 部署mqtt —— 筑梦之路

mqtt是干嘛的&#xff0c;网上有很多资料&#xff0c;这里就不再赘述。 --- apiVersion: apps/v1 kind: Deployment metadata:labels:app: mqttname: mqttnamespace: default spec:replicas: 1selector:matchLabels:app: mqttstrategy:rollingUpdate:maxSurge: 25%maxUnavaila…...

模型部署:量化中的Post-Training-Quantization(PTQ)和Quantization-Aware-Training(QAT)

模型部署&#xff1a;量化中的Post-Training-Quantization&#xff08;PTQ&#xff09;和Quantization-Aware-Training&#xff08;QAT&#xff09; 前言量化Post-Training-Quantization&#xff08;PTQ&#xff09;Quantization-Aware-Training&#xff08;QAT&#xff09; 参…...

C++模板元模板(异类词典与policy模板)- - - 题目答案

目录 一、书中第一题 二、书中第三题 三、书中第五题 四、书中第六题 五、书中第七题 六、书中十一题 七、书中十二题 八、 书中十三题 总结 一、书中第一题 #include <iostream>template <typename T, size_t N> struct NSVarTypeDict {static void Cre…...

二十三种设计模式全面解析-组合模式与迭代器模式的结合应用:构建灵活可扩展的对象结构

在前文中&#xff0c;我们介绍了组合模式的基本原理和应用&#xff0c;以及它在构建对象结构中的价值和潜力。然而&#xff0c;组合模式的魅力远不止于此。在本文中&#xff0c;我们将继续探索组合模式的进阶应用&#xff0c;并展示它与其他设计模式的结合使用&#xff0c;以构…...

postgresql|数据库|提升查询性能的物化视图解析

前言&#xff1a; 我们一般认为数字的世界是一个虚拟的世界&#xff0c;OK&#xff0c;但我们其实有些需求是和现实世界一模一样的&#xff0c;比如&#xff0c;数据库尤其是关系型数据库&#xff0c;希望在使用的数据库能够更快&#xff08;查询速度&#xff09;&#xff0c;…...

Unity中Shader雾效的原理

文章目录 前言一、我们先看一下现实中的雾二、雾效的混合公式最终的颜色 lerp(雾效颜色&#xff0c;物体颜色&#xff0c;雾效混合因子) 三、雾效的衰减1、FOG_LINEAR&#xff08;线性雾衰减&#xff09;2、FOG_EXP(指数雾衰减1)3、FOG_EXP(指数雾衰减2) 前言 Unity中Shader雾…...

chatgpt辅助论文优化表达

chatgpt辅助论文优化表达 写在最前面最终版什么是好的论文整体上&#xff1a;逻辑/连贯性细节上一些具体的修改例子 一些建议&#xff0c;包括具体的提问范例1. **明确你的需求**2. **提供上下文信息**3. **明确问题类型**4. **测试不同建议**5. **请求详细解释**综合提问范例&…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式&#xff0c;可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日&#xff0c;国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解&#xff0c;“超级…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计&#xff0c;聪明的码友立马就知道了&#xff0c;该到数据访问模块了&#xff0c;要不就这俩玩个6啊&#xff0c;查库势在必行&#xff0c;至此&#xff0c;它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据&#xff08;数据库、No…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...