类实例化内存分析,继承,多态

c++对象模型05:虚继承内存布局 虚继承 虚继承解决了菱形继承中最派生类拥有多个间接父类实例的情况。虚继承的派生类的内存布局与普通继承很多不同,主要体现在: 虚继承的派生类,如果定义了新的虚函数,则编译器为其生成一个虚函数指针(vptr)以及一张虚函数表。该vptr位于对象内存最前面。(非虚继承时,派生类新的虚函数直接扩展在基类虚函数表的下面。) 虚继承的派生类有单独的虚函数表,基类也有单独的虚函数表,两部分之间用一个四个字节的0x00000000来作为分界。 虚继承的派生类对象中,含有四字节的虚基表指针。 在C++对象模型中,虚继承而 阅读详情

      抽象类可以有构造方法

但是抽象类不能实例化对象

 

若类的所有方法均不是抽象方法,此时仍然可以将类定义成抽象的。此时的意义在于,该抽象类只能被继承,不能用来实例化对象。

 

final修饰类,类不可以被继承

final修饰方法,方法不能被重载,但是可以被重写。

final修饰变量,变量成常量。只能初始化一次。(不包含在构造函数中。因为在构造函数中是初始化。)

 

在java中同其他语言一样,支持方法的重载:

public class MyMath {

     //参数数量,参数类型不同
     //返回值不参与重载判断
     //参数名不参与重载判断
     public int adder(int add1,int add2)          //adder_int_int
     {
         return add1+add2;
     }     
     
     public int adder(int add3,int add4,int aaa)          //adder_int_int_int
     {
         return add3+add4;
     }
     
     public float adder(float add1,float add2)   //adder_float_float
     {
         return add1+add2;
     }
     
     public double adder(double add1,double add2) //adder_double_double
     {
         return add1+add2;
     }    
}

 

 

也支持重写:此时必须保证 子类中方法的返回值、函数名、参数类型、参数个数,与父类中的完全一样!

 

关于多态!:

 

 

从内存角度剖析虚函数实现多态的原理 刚开始学习C++虚函数的时候,只知道虚函数就是用来构成动态多态的,以及如何使用虚函数。但是我发现当碰到稍微复杂的多态问题的时候,就很难以理解其实现原理,导致使用出错,比如:一个派生类继承基类,生成对象有两种方式:调用基类生成对象、调用派生类生成对象,调用完毕后释放对象,哪种方式必须要用虚函数实现基类和派生类的析构函数,如果不用会出现什么问题?(这个问题后面我会单独写一个博客再解释)。而《C++ Primer》中更多的是对虚函数使用的讲解,查阅有关虚函数的博客也仅仅是在结论层次对虚函数、纯虚函数进行分析和比较 阅读详情

相关推荐

C++中多态实现的原理分析、虚继承的原理

多态的原理分析 在面向对象的语言中,封装、继承、多态三大特性。我们今天说说C++中多态的实现原理。 多态往往是用来在继承中,子类中的某些行为与父类中的不同,但是为了降低调用的耦合度,我们就定义出,一个对象中有不同的形态,当然是相对与传的对象。 在C++中多态 在c++中多态就是要满足两个要求,当然前提是在继承中,因为有继承才为了满足一些要求,才出现了多态。 1)必须在继承中,存在虚函数,...

GangStudyIT的博客 721

Java学习之多态的内存分配

多态的弊端就是不能访问子类的特有功能,但如果我们想要去访问子类特有的功能该怎么办呢? 1、创建子类对象调用方法(可行,但是太占内存不合理); 实例: 2、把父类的引用强制转换为子类的引用。(向下转型) 对象间的转型: 向上转型:父类引用指向子类对象(从子到父) Fu f=new Zi();

sinat_34443859的博客 435

工业级以太网通信实战:用FPGA驱动YT8531 PHY芯片的完整避坑指南

本文是一份针对工业级以太网通信的实战指南,详细讲解了如何使用FPGA驱动YT8531 PHY芯片。内容涵盖从硬件设计(电源、时钟、复位)到MDIO接口驱动开发、PHY配置与链路管理的全流程,并重点剖析了十个常见的开发“陷阱”及其解决方案,旨在帮助工程师在复杂的工业环境中实现稳定可靠的以太网通信连接。

weixin_29191669的博客 147

类的继承和多态学习笔记

类的继承: 面向对象(OOP)的一大特色就是: 继承;继承拥有这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。 通过继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”,继承的过程,就是从一般到特殊的过程,继承的最大好处就是:子类获得了父类的全部功能 继承概念的实现方式主要有2类:实现继承、接口继承。 ...

xrinosvip的博客 1478

更新3ds时和用读卡器读取传输文件操作不当导致的tf卡损坏无法读取需要格式化时出现的问题以及不想丢失文件并且修复的详细解决方法

前言: 不小心按了同意更新而且tf/sd卡损坏导致了3ds打开后都是出现 Anerror has occurred:(红色的) Failed to apply 1 FIRM patch(es). Press any button to shotdown 这样的画面,按了任意键后就关机,我找了很多资料和大佬的回答解决了这些问题,现在记录一下。 一.不小心按了更新导致上述的画面 原因:是因为系统升级了,但是里面的Luma3DS还没有更新,属于是更新了但没有完全更新的状态。 **修复方法** 1.首先请按

give_me_fish的博客 1万+

一个三极管和稳压管构成的简易稳压电源

一、对电压精度要求不高的场所可以使用本文中所述的简易稳压电源(电流变化引起 的基极-发射极的压降 变化 对输出电压来说可以容忍)二、根据负载实际需求选择三极管,不同的三极管集电极电流不同,电流放大倍数不同(1、尽量选择负载电流(iC 或 iE)上限时,hFE仍然比较理想的三极管,2、一般三极管对基极电流没有限制,可以适当调整基极电流以获得所需输出电流)

五花带点肉 1万+

【c++ 封装、继承、多态】

函数运行的版本不是一开始就确定好了的而是在程序运行的时候才选择函数运行的版本,至于到底选择哪个函数版本取决于调用该函数的指针或者引用实际绑定的数据对象。

小呆鸟blog 6765

Python量化交易实战:从零搭建你的第一个多因子选股模型(附完整代码)

本文是一份详细的Python量化交易入门实战指南,手把手教你从零搭建第一个多因子选股模型。内容涵盖环境配置、数据获取、因子挖掘与有效性检验、多因子合成以及完整的策略回测与绩效评估,并附有可直接运行的完整代码,帮助初学者快速掌握量化交易的基本概念与实践流程。

resnet7explorer的博客 936

C++中的继承与多态

本文深入探讨了C++中的类继承机制,解释了继承的基本概念、语法格式及其在工程中的应用。文章详细介绍了类继承的三种方式(public、protected、private)及其对访问权限的影响,强调了public继承的广泛适用性。此外,文章还讨论了基类与派生类之间的赋值兼容性、内存切片现象以及继承中的作用域问题。通过示例代码和图示,文章展示了继承中可能出现的特殊现象,如隐藏和覆盖,并提供了实际代码运行结果以加深理解。最后,文章总结了继承在C++编程中的重要性,强调了其在扩展类功能和提高代码复用性方面的优势。

m0_73987904的博客 2110

【无标题】ReaxFF拟合参数以及算法安装

ReaxFF拟合参数以及算法安装

zmzyzm的博客 1420

Python爬虫教程:抓取地方政府网站的公开文件与政策信息

Web爬虫是指一种自动化脚本,用于模拟人类浏览器访问网页、提取网页内容的数据抓取工具。发送请求到目标网页;获取网页内容;解析网页内容,提取所需数据;将数据保存或进一步处理。爬虫可以抓取各种形式的数据,如文本、图片、文件等。本教程将重点展示如何抓取地方政府网站上公开的政策文件、公告等信息。许多政府网站都会采取一定的反爬虫措施,防止大量数据被爬取。IP封锁:如果短时间内大量请求来自同一IP,可能会被封锁。验证码:一些网站会使用验证码来验证访问者是否为机器人。动态加载。

2201_76125261的博客 1981

【C++】继承和多态常见的面试问题

菱形继承指的是一个类通过两个子类继承了同一个基类,这两个子类再被另一个派生类继承,形成菱形结构。class A {};在这个结构中,D通过B和C间接继承了两次A,这就形成了菱形继承。菱形继承的问题数据冗余:由于D通过B和C继承了两份A,导致存在两份相同的A成员。这在内存中会引起冗余,浪费空间。二义性问题:当在D中试图访问A的成员时,编译器无法确定该访问来自B继承的A还是C继承的A,从而导致二义性。例如:D d;d._a;// 编译器不确定是访问 B::_a 还是 C::_a菱形虚拟继承。

2301_76677973的博客 3646

Plant Simulation 双深位立库开发系列教程-货架参数化

为了方便用户进行货架参数化,我们需要在交互界面上进行参数调整,右键打开RackLane,打开Dialog,在Rack_tab的tab下创建相应的对象,并创建NumberOfRightRack和NumberOfLeftRack作为数据连接对象。通过Rack._3D.VisibleGraphicGroups := ["default"]来切换需要显示的Rack,当不需要显示则可以Rack._3D.VisibleGraphicGroups := [""]即可。首先,加载默认的HBW库到模型中,确保结构树当中有。

santayana的专栏 1260

详解多态、虚继承、多重继承内存布局及虚表(C++)

详解C++多态、虚继承、多重继承内存布局,及虚函数表,虚表指针。

一枚菜鸡 2970

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

C++继承和多态

基类是 private ,这种情况下,无论以何种方式继承,对于基类私有的部分在子类中都是不可见的,这里的不可见指的是无法访问,但仍然继承下来了,只是无法使用而已。但是可以通过父类提供的方法进行间接的访问和使用。如图:(Print 方法在上图父类中有写)如图:对于父类私有成员,子类无论哪种继承都无法访问,对于父类其他成员,继承后被哪种访问限定符修饰取决于父类成员访问限定符和继承方式中权限小的那一个。

2401_84642040的博客 2738

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

C++ 类的继承与多态机制,从语法到内存布局(含虚函数详解)

普通继承(不加 virtual)虚继承(加 virtual)A子对象存在两份A子对象只存在一份成员访问有歧义成员访问统一无歧义需要显式指定路径可直接访问内存占用更大占用更少。

SoulruiA的博客 3050

c++ 多态内存布局分析

前言 上节对分析了多态的基本概念, 本节从内存布局的角度再来分析一下多态吧。 单一继承的内存布局 最开始我们分析了虚指针, 虚表, 但都只停留在单继承中, 现在我们在来扩展的探讨多重继承的内存布局 #include <iostream> #include <stdlib.h> #include <cstring> #include <functional&

啦啦啦 2043

继承和多态的内存图解

今天被继承和多态困扰,在优快云上找了好几个内存分配讲解,个人感觉不全吧,就把他们做了个整合。。。。(讲解的是多态的方法和成员调用和继承中的方法和变量的调用) 什么是多态 // 同一个对象,在不同时刻表现出来的不同形态 多态的前提 // 要有继承或实现关系要有方法的重写要有父类引用指向子类对象 多态的好处和弊端(记忆) 好处 // 提高程序的扩展性。定义方法时候,使用父类型作为参数,在使用的时候,使用具体的子类型参与操作 弊端 // 不能使用子类的特有成员 多态成员访问特点 成员变量 :编译看父类,运

Baldy_baby的博客 1291

CD62.【C++ Dev】继承和多态的练习题

回顾C++中函数重载、隐藏和重写的区别;然后介绍两种设计不可继承类的方法:C++98通过私有构造函数(需借助静态成员函数创建对象)和C++11的final关键字(可直接禁止继承);接着分析包含虚函数的类实例大小计算(考虑虚表指针和内存对齐);最后通过一个较难的多态调用案例,展示虚函数重写时参数默认值的继承规则(使用父类定义而非子类),并验证通过父类指针调用子类重写函数时的多态行为。全文涵盖继承、多态、内存布局等C++核心概念。

zhangcoder的博客 记录学习轨迹~ 906

多态机制原理解析--从内存角度分析

回头看多态,又有了新的认识。 理解多态主要搞清楚以下几个问题就可以了:(以父类Pet,子类Dog为例) 1.为什么可以用表达式 Pet p1= new Dog(); //为什么可以用父类的引用指向子类创建的对象? 2. 当用父类的引用p1,操作子类的对象的时候,为什么可以操作复写(override)的Method,怎么知道该Method是子类的而不是父类的? 3. 当用父类的引用p1操作子类

嘤其鸣矣,求其友声 3375

C语言模式实现C++继承和多态

这个问题主要考察的是C和C++的区别,以及C++中继承和多态的概念。C和C++的区别C语言是面向过程的语言,而C++是面向对象的过程。什么是面向对象和面向过程? 面向过程就是分析解决问题的步骤,然后用函数把这些步骤一步一步的进行实现,在使用的时候进行一一调用就行了,注重的是对于过程的分析。面向对象则是把构成问题的事进行分成各个对象,建立对象的目的也不仅仅是完成这一个个步骤,而是描述各个问题在解决的过

菜鸟成长记 1万+

C++继承中的多态

就类如 dog 类重写,将叫声输出为“ 汪汪汪”,那么这个函数就叫做虚函数,虚函数允许子类重写基类的函数,从而在运行时通过多态机制调用子类的具体实现。

zjsnh 1427

c++头脑风暴-多态、虚继承、多重继承内存布局

本篇文章深入分析多态、虚继承、多重继承的内存布局以及实现原理。 首先还是看一下思维导图: 下面根据这个大纲一步一步的进行深入解析。 一、没有虚函数时内存布局是怎样的 1. 没有虚函数时类的内存布局 一个类没有虚函数的时候,其实就是结构体,它的内存布局就是按照成员变量的顺序来的。 看如下代码: #include <iostream> using namespace std; class CPeople { double height; int age; char sex; public:

cpp加油站的专栏 649

多态继承中的内存图解

多态继承中的内存图解

LFSenior 2998
上一篇: 老师对我说
下一篇: 遇事不顺...
javaActor
博客等级 码龄17年 22粉丝 42原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值