继承是扩展现有类并为基类提供新功能的一种方式。

本文主要探讨一个问题:子类会包含父类所包含的一切吗?

起初,作者认为这个问题的答案是否定的,因为子类无法访问父类的private成员

但是,运行下述一个简易的示例代码,得到Entity类和Player类的大小分别是8和16。

#include<iostream>

class Entity {
private:
float X, Y;
}; class Player : public Entity {
public:
const char* Name;
}; int main() {
std::cout << sizeof(Entity) << std::endl;
std::cout << sizeof(Player) << std::endl;
std::cin.get();
return 0;
}

其中,Entity类的大小为两个int成员(大小为4)之和,Player类的大小正好为Entity的两个int成员与字符指针Name(64位大小为8,32位大小为4,这里是64位)之和。

这也证明了Player类包含了Entity类,因此问题的答案是肯定的。

当X和Y设为Entity的私有成员时,尽管Player的对象无法访问X和Y,但派生类会继承基类的所有成员,包括私有成员。

即使这些私有成员不能直接被派生类访问,它们仍然是类对象内存布局的一部分。

这同时也证实了C++的可见性(private、protected、public)修饰符只是限制了访问权限,规范编程,对程序的实际运行方式和性能没有影响。

如文章有误或疏漏,欢迎评论指出

如有帮助,欢迎关注我的博客,后续也会更新其他的技术内容(坚持日更ing)

特别推荐 Cherno 的C++课程,可以去某管订阅他的频道,B站也有转载

【C++】类的继承的深入探讨的更多相关文章

  1. Java编程里类的继承

    今天,我们将要讨论的内容是Java里面类的继承的相关概念. 说到继承,我相信大家都不陌生.生活中,子承父业,子女继承父母的财产,这就是继承.实际上,Java里的继承也是如此.对于一个类来说,它的数据成 ...

  2. 【游戏开发】在Lua中实现面向对象特性——模拟类、继承、多态

    一.简介 Lua是一门非常强大.非常灵活的脚本语言,自它从发明以来,无数的游戏使用了Lua作为开发语言.但是作为一款脚本语言,Lua也有着自己的不足,那就是它本身并没有提供面向对象的特性,而游戏开发是 ...

  3. JavaScript是如何工作的:深入类和继承内部原理 + Babel和TypeScript 之间转换

    这是专门探索 JavaScript 及其所构建的组件的系列文章的第 15 篇. 如果你错过了前面的章节,可以在这里找到它们: JavaScript 是如何工作的:引擎,运行时和调用堆栈的概述! Jav ...

  4. JavaScript是如何工作的:深入类和继承内部原理 + Babel和TypeScript之间转换

    现在构建任何类型的软件项目最流行的方法这是使用类.在这篇文章中,探讨用 JavaScript 实现类的不同方法,以及如何构建类的结构.首先从深入研究原型工作原理,并分析在流行库中模拟基于类的继承的方法 ...

  5. Python 类的继承__init__() takes exactly 3 arguments (1 given)

    类(class),可以继承基类以便形成具有自己独特属性的类,我们在面向对象的编程中,经常用到类及其继承,可以说没有什么不是类的,今天我们就来详细探讨一下在python中,类的继承是如何做的. 我们假设 ...

  6. 【转载】【游戏开发】在Lua中实现面向对象特性——模拟类、继承、多态

    [游戏开发]在Lua中实现面向对象特性——模拟类.继承.多态   阅读目录 一.简介 二.前提知识 三.Lua中实现类.继承.多态 四.总结 回到顶部 一.简介 Lua是一门非常强大.非常灵活的脚本语 ...

  7. UML类图(上):类、继承和实现

    面向对象设计 对于一个程序员来说,在工作的开始阶段通常都是别人把东西设计好,你来做.伴随着个人的成长,这个过程将慢慢变成自己设计一部分功能来实现,自己实现.如果要自己设计,无论是给自己看,还是给别人看 ...

  8. 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸

    类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...

  9. (转)Java:类与继承

    原文地址: http://www.cnblogs.com/dolphin0520/p/3803432.html 对于面向对象的程序设计语言来说,类毫无疑问是其最重要的基础.抽象.封装.继承.多态这四大 ...

  10. iBatis.net 类的继承extends和懒加载

    <resultMaps> <resultMap id="FullResultMap" class="t_c_team_member_permission ...

随机推荐

  1. Genuine Intel(R) CPU型号

    起因: 在盘点固定资产的时候,发现有一台电脑CPU不显示具体型号,而是 英特尔 @ 2.60GHz (X2) ,通过主板型号来判断是至强系列的CPU,后经软件识别为 Genuine ,然后去查资料才了 ...

  2. 【赵渝强老师】如何分析Java的内存溢出问题

    一.什么是内存溢出? 内存溢出(OOM:out of memory)通俗理解就是内存不够,通常在运行大型软件或游戏时,软件或游戏所需要的内存远远超出了你主机内安装的内存所承受大小,就叫内存溢出. 在J ...

  3. Ai大模型推理-未完善

    环境 安装Conda 最低要求 CUDA 版本为 11.3 #获取安装脚本 wget -c 'https://repo.anaconda.com/archive/Anaconda3-2024.06-1 ...

  4. 数据库运维实操优质文章分享(含Oracle、MySQL等) | 2023年6月刊

    本文为大家整理了墨天轮数据社区2023年6月发布的优质技术文章/文档,主题涵盖Oracle.MySQL.PostgreSQL等数据库的安装配置.故障处理.性能优化等日常实践操作,以及常用脚本.注意事项 ...

  5. 墨天轮最受DBA欢迎的数据库技术文档-容灾备份篇

    在大家的支持与认可下,墨天轮编辑部继续为大家整理出了[墨天轮最受欢迎的技术文档]系列第二篇--容灾备份篇,希望能够帮助到大家. 作为一名数据库管理员,最怕数据库中心突然失去服务能力.影响业务,而不论是 ...

  6. WPF-超市管理系统

    1. 新建 WPF APP (net framework )项目

  7. 使用rancher cli对接k8s

    一.获得rancher的token 1.进入rancher,点击右上角弹出框的ApI&Keys 2.进入页面后选择添加key 3.注意,这里的作用集群范围必须不能指定,否则在jenkins服务 ...

  8. 为重复使用的HttpClient对象动态修改Timeout

    最近博客园被**了, 赶紧水一文支持一下博客园,加油! 问题现象 当HttpClient被使用过之后, 在修改它们的属性会抛出错误This instance has already started o ...

  9. Vue 中 v-html 无法被 style scoped 渲染的问题

    假设有这么一个 vue 组件: <template> <div v-html="docPreview"/> </template> <st ...

  10. k8s 中的 Gateway API 的背景和简介【k8s 系列之四】

    〇.Gateway API 的背景 第一阶段:Service 初始的 Kubernetes 内部服务向外暴露,使用的是自身的 LoadBlancer 和 NodePort 类型的 Service. 在 ...