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

C++基础(7)——类和对象(5)

前言

本文主要介绍C++中的继承

4.6.1:继承和继承方式(公有、保护、私有)

4.6.2:继承中的对象模型,sizeof()求子类对象大小

4.6.3:子类继承父类后,两者构造和析构顺序

父类先构造、子类先析构

 如果是简单的一个类包含另一个类的对象

4.6.4:继承同名处理办法

当子类中有成员属性和父类中的成员属性同名时,可以添加作用域分别访问到子类和父类中的成员属性

有相同名字的成员函数也是一样的操作

注意:当子类中有和父类相同的函数名,那么父类中该函数和其重载的函数都不能通过子类对象直接进行访问,如果想访问就要向上面一样加作用域

4.6.5:多继承语法

前提:Son子类继承Dad类和Mon类,其中Dad类和Mon类就名字,构造、析构打印相关打印的内容不同

子类继承多个父类,执行构造函数的顺序按照继承顺序;当父类中出现了同名的成员属性或函数时,要加父类的作用域去加以区分

改变一下继承的顺序

4.6.6:菱形继承(钻石继承、虚继承)

基本概念:两个子类A、B继承同一个父类C,然后一个类D同时继承类A和类B

会出现的问题

1:数据二义性,类D会从类A和类B中继承名字相同的属性或方法

2:有些数据只需继承一份即可,不需要继承两份

通过GrandSon创建一个对象,每个类中的数据都会继承一份,没有必要(8+8+4)

使用虚继承(virtual关键字)来实现数据一份,继承的是指针,一个指针占8字节。主要是继承了vbptr指向虚基类表,在虚基类表中有偏移

 使用虚继承后的代码,打印了一些地址和类的大小

总结

以上就是本文的全部内容,非常感谢你能看到这

http://www.lryc.cn/news/93725.html

相关文章:

  • 【Express.js】sql-knex 增删改查
  • 构建基于前后端分离的医学影像学学习平台:Java技术实现与深度解析
  • 从零开始学习R语言编程:完全指南
  • PulsarMQ系列入门篇
  • 编程的实践理论 第九章 交互
  • BSN全球技术创新发展峰会在武汉举办,“延安链”正式发布
  • 8.4 IP地址与端口号
  • day56_springmvc
  • SQL Server Management Studio (SSMS)下载,安装以及连接数据库配置
  • go 错误 异常
  • 智慧加油站卸油作业行为分析算法 opencv
  • LiangGaRy-学习笔记-Day22
  • 数据库横表和竖表有什么区别
  • 哈希表--day1--基本理论介绍
  • 基于OpenMV的疲劳驾驶检测系统的设计
  • chatgpt赋能python:使用Python来寻找两个列表不同元素的方法
  • 简单学生管理系统
  • 图像金字塔
  • Springboot整合Camunda工作流引擎实现审批流程实例
  • PHP设计模式21-工厂模式的讲解及应用
  • 【玩转Docker小鲸鱼叭】理解Docker的核心概念
  • Eureka 心跳和服务续约源码探秘——图解、源码级解析
  • 代码随想录二刷 530 二叉搜索树的最小绝对差 98. 验证二叉搜索树 700. 二叉搜索树中的搜索
  • Docker安装——CentOS7.6(详细版)
  • 论信息系统项目的整体管理(范文)
  • 【音视频处理】音频编码AAC详解,低码率提高音质?
  • 逆函数学习
  • 代码审计——SSRF详解
  • 搭建Scala开发环境
  • BLIP和BLIP2