问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

求问,C++中纯虚函数的实现原理是什么,即C++通过什么样的机制来实现这个功能的?不是问它的作用是什么。

发布网友 发布时间:2022-04-09 01:35

我来回答

3个回答

懂视网 时间:2022-04-09 05:57

虚函数实现了c++的多态的机制,多态就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。

  在某基类中声明为 virtual 并在一个或多个派生类中被重新定义的成员函数,用法格式为:virtual 函数返回类型 函数名(参数表) {函数体};实现多态性,通过指向派生类的基类指针或引用,访问派生类中同名覆盖成员函数。简单地说,那些被virtual关键字修饰的成员函数,就是虚函数。虚函数的作用,用专业术语来解释就是实现多态性(Polymorphism),多态性是将接口与实现进行分离;用形象的语言来解释就是实现以共同的方法,但因个体差异,而采用不同的策略。下面来看一段简单的代码。当将基类中的某一成员函数声明为虚函数后,派生类中的同名函数(函数名相同、参数列表完全一致、返回值类型相关)自动成为虚函数。

热心网友 时间:2022-04-09 03:05

我想虚函数的原理您应该很清楚, yes, vtable。
那么类中含有纯虚函数时,其vtable 不完全,有个空位。
即“纯虚函数在类的vftable表中对应的表项被赋值为0。也就是指向一个不存在的函数。由于编译器绝对不允许有调用一个不存在的函数的可能,所以该类不能生成对象。在它的派生类中,除非重写此函数,否则也不能生成对象。”

希望能对您有所帮助,也谢谢您提出这个问题,让我有了对他的思考。以前并没有仔细想这个问题。

祝技术越来越牛!

热心网友 时间:2022-04-09 04:23

个人理解,在编译系统预编译阶段,预编译到纯虚函数时 (即关键语句 virtual ~~(~)=0;)
编译器只会给他编译:名字~~(~)和分配一个空间给他,不编译函数体。当本类被其他类继承时,编译器二次编译,加入派生类的此函数的编写的函数体进行完整预编译。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
苹果电脑电池充不进电苹果电脑充不进去电是怎么回事 苹果电脑不充电没反应苹果电脑充电指示灯不亮充不了电怎么办 狗狗更加忠诚护家、善解人意,养一只宠物陪伴自己,泰迪能长多大... 描写泰迪狗的外形和特点的句子 国外留学有用吗 花钱出国留学有用吗 !这叫什么号 百万医疗赔付后是否可以续保 前一年理赔过医疗险还能续保吗? 医疗住院险理赔后还能购买吗? 手机突然从4G变成E是什么意思? 4G网上的好好的,突然变成“E”是啥意思 Viⅴo27移动4g变成e怎么解决? 苹果4G变E了怎么切换回来? 为什么手机网络突然从4G变成一个E了 手机信号突然从4G变成“E”,这是啥意思? 4G变e怎么变回来 华为手机4g变e怎么恢复 我的手机从4G变成了E后在信号强的地方都不自动转换成4G怎么办 手机突然连不上4g网络变成了E是什么意思 手机4g信号变成了E而且变不回来了 iPhone6S装的移动卡,突然由4g变成了E,变不回去了 中国移动4G 突然变成E了.什么情况? 移动4g变成e怎么解决 中国移动4G 突然变成E了.什么情况 移动4g变成e怎么解决? 手机4g忘了6变成e了 也变不回来了? 开启了4g但是一变成e就变不回来是怎么回事 英特尔i5 9300H核心数是多少? 笔记本i510200h和i59300H到底选哪个? 谁知道 C++ 中 虚函数的工作机制???? c++中,虚函数的运行机制是什么 C++中虚函数的作用是什么?它应该怎么用呢? C语言问题虚函数的问题 虚函数的实现方式和C语言中的哪个数据类型相似 c加加多态的种类,各自实现的机制 c/c++高手帮忙!!!c++中的virtual函数究竟是怎么实现的,用 C 语言表达出来,代码请加注释。 面向对象多态机制中,多个子类以不同的方式实现了父类里的虚函数,子类对象要调用父类中的虚函数时,父类 c++虚函数的说明 c++中什么是实函数 什么是虚函数 Objective-C有虚函数的概念吗? C++虚函数问题,续函数如何运行的机制 C++中虚函数的作用是什么?定义是什么?简要说明下,并举一个简单的例子? c++虚函数是干什么的?我没看懂,谁能给我讲一下 在C++中用虚函数的作用是什么?为什么要用到虚函数 c 虚函数的作用举例? 苹果7查询序列号出现无法验证产品购买日期是怎么回事啊 苹果序列号无法验证购买日期怎么办? 买的apple airpodspro官网查询序列号之后显示购买日期未验证是什么意思? 苹果序列号无法验证购买日期怎么办