1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > C++:构造函数中调用虚函数

C++:构造函数中调用虚函数

时间:2022-12-03 17:07:14

相关推荐

C++:构造函数中调用虚函数

好儿郎~志在四方

时光就这样流逝,怎能不心痛。

目录视图 摘要视图 订阅 【1024程序员节】获奖结果公布【观点】有了深度学习,你还学传统机器学习算法么?【资源库】火爆了的React Native都在研究什么

C++:构造函数中调用虚函数

标签: C++构造函数中调用虚函数 -10-17 16:07 68人阅读 评论(0) 收藏 举报 本文章已收录于:分类:作者同类文章X•C++:什么情况下需要将析构函数定义为虚函数?•C++编程经验分享•C、C++中使用const提高程序的健壮性和效率•C++中四种类型转换运算符的使用方法(reinterpret_cast,const_cast,static_cast,dynamic_cast) 更多

目录(?)[+]

C交流群 302558294欢迎你的加入原文地址httpblogcsdnnetalex_myarticledetails44017509 感谢原作者总结分享

C++交流群: 302558294(欢迎你的加入)

原文地址:/alex_my/article/details/44017509 ,感谢原作者总结分享

谈谈关于构造函数中调用虚函数的情况,仅讨论单继承,不考虑虚拟继承和多重继承。

测试平台:VS + Win7X64

一个例子: #include <stdlib.h>

#include <stdio.h>

class Base

{

private:

int __data;

public:

Base()

{

this->Func();

}

public:

virtual void Func()

{

printf("Base::Func");

}

};

class Deri : public Base

{

public:

Deri()

{ this->Func();

}

public:

virtual void Func()

{

printf("Deri::Func\n");

}

};

int main(int argc, char** argv)

{

Deri d;

getchar();

return 0;

}

输出: Base::Func Deri::Func

首先讨论下对象d的构造情况。 1 先构造基类部分,调用基类Base的构造函数,这个时候,派生类部分还没有产生,这时候虚表应该是绑定基类的,自然调用的是Base::Func()

2 再构造派生类部分,这个时候,虚表发生变化,绑定在派生类上,调用Deri::Func()

虽然,在派生类中有重载Func这个函数,但是,在构造基类部分的时候,派生类的成员数据还没有初始化,如果是调用派生类中的Func,会造成错误,内存越界甚至崩溃。

在函数中,可以通过打印虚表地址:

-- Base::Func() int* vtl = (int*)*((int*)this); std::cout << "Base: " << this << " VTable: " << vtl << std::endl;

-- Deri::Func() int* vtl = (int*)*((int*)this); std::cout << "Deri: " << this << " VTable: " << vtl << std::endl;

输出: Base: 0028F980 VTable: 003FDC78

Deri: 0028F980 VTable: 003FDC98

发现,虚表的地址是不断变化的。顶 0 踩 0上一篇C++:什么情况下需要将析构函数定义为虚函数? 下一篇Qt:图片翻转(水平、垂直、顺时针、逆时针)

我的同类文章

•C++:什么情况下需要将析构函数定义为虚函数?-10-17•C、C++中使用const提高程序的健壮性和效率-08-30•Visual Studio中出现This function or variable may be unsafe错误提示-07-27•Thinking in C++: 第1章 为什么C++会成功-07-16•Thinking in C++: 第1章 继承:类型关系-07-15•C++编程经验分享-08-30•C++中四种类型转换运算符的使用方法(reinterpret_cast,const_cast,static_cast,dynamic_cast)-08-25•C++: 友元函数和友元类详解-07-17•Thinking in C++: 第1章 多态性-07-15•Thinking in C++: 第1章 对象=特性+行为-07-15更多文章

参考知识库

.NET知识库

更多资料请参考: 猜你在找 C++ 单元测试(GoogleTest)《C语言/C++学习指南》数据库篇(MySQL& sqlite)C/C++单元测试培训c++面向对象前言及意见征集(来者不拒)视频课程Linux环境C++编程基础视频课程 构造函数中调用虚函数---C++C++中构造函数中调用虚函数的问题CC++ 在构造函数中调用虚函数能实现多态吗Vptr指针初始化的过程分析C++中构造函数中调用虚函数的问题C++ 构造函数中能调用虚函数吗查看评论

暂无评论

* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

核心技术类目
全部主题HadoopAWS移动游戏JavaAndroidiOSSwift智能硬件DockerOpenStackVPNSparkERPIE10EclipseCRMJavaScript数据库APIHTMLSDKIISFedoraXMLLBSUnitySplashtopUMLcomponentsWindows MobileRailsQEMUKDECassandraCloudStackFTCcoremailOPhone CouchBase云计算iOS6Rackspace Web AppSpringSideMaemoCompuware大数据aptechPerlTornadoRubyHibernateThinkPHPHBasePureSolrAngularCloud FoundryRedisScalaDjangoBootstrap 我的简介: 个人资料

好儿郎-志在四方 访问:149784次 积分:4076 等级:积分:4076 排名:第5645名 原创:211篇 转载:44篇 译文:2篇 评论:155条 博客专栏 阅读排行 MFC、VC++综合作业题(4600)小何讲进程: Linux进程控制编程 (fork、vfork)(4402)C++标准库和标准模板库(4175)《Windows程序设计》复习题(3729)小何讲Linux: 基本文件操作和实例(3621)在Qt中使用C++代码创建界面(3055)软件测试技术之: 白盒测试和黑盒测试(2954)小何讲进程: 编写Linux守护进程方法详解(2737)用C语言讲一讲位运算 入门级(详细图解)(2544)Qt: 创建具有复选框的树形控件(2267) 文章分类 C++程序设计浅尝(44) C程序设计浅尝(18) 蓝桥杯大赛(24) linux学习历程(36) MFC浅尝(16) Qt编程浅尝(67) DOS浅尝(2) 51单片机学习(6) ARM企业实训(4) 算法与数据结构(11) 全国计算机等级考试三级数据库(9) Android入门(0) 趣味编程(1) Java历程(1) ACM程序设计(1) C、C++面试集锦(9) 网页设计(1) 电脑操作小技巧(6) 大学生活+感悟记录(8) 杂七杂八(5) 文章存档 10月(18)09月(12)08月(10)07月(19)06月(24)05月(34)04月(32)03月(30)02月(11)01月(26)12月(11)11月(9)10月(5)09月(13)07月(2)06月(1) 展开文章搜索评论排行 我的求职简历(大三学生)(22)试问蓝桥杯有多水,一道题就能回答你(吐槽,坑)(13)祝贺我的博客访问量过万(访问量:10260次)(13)学IT,看教程,看视频,你必须知道的学习网站(9)C++面试题:三种数值交换方法(9)Linux常用命令大搜罗、大总结(5)蓝桥杯 — 加法变乘法(把其中两个不相邻的加号变成乘号)(4)Qt: qobject_cast<QPushButton*>(sender()) 简化信号与槽的编写(4)蓝桥杯 历届试题 核桃的数量(4)聚合与组合的区别(3) 最新评论 手把手教你:用Qt做一个漂亮的电子时钟(纯代码)

好儿郎-志在四方:@miao1991:不妨贴出你的代码看一看吧。

手把手教你:用Qt做一个漂亮的电子时钟(纯代码)

好儿郎-志在四方:@miao1991:没有原程序,定位不了你的程序出错误的原因。

手把手教你:用Qt做一个漂亮的电子时钟(纯代码)

miao1991:我qDebug除了但到时 hh:mm:ss 但是显示的只有mm:ss为什么呢

如何在CSDN博客中插入动态图(GIF)

HongdengLi:正好需要,谢谢了

Qt: 多线程,继承QThread,重写run(理论+实例)

好儿郎-志在四方:@z609932088:天天向上。

Qt: 多线程,继承QThread,重写run(理论+实例)

DreamLife-i:好好学习

Qt多线程:QtConcurrent配合lambda表达式(实例)

DreamLife-i:搜藏,日后学习

第二章:10道C/C++经典面试题

adj:单链表反转感觉有点问题,应该这样tmp = cur;cur = cur.next;tmp.next ...

我的求职简历(大三学生)

独立风华:别写“擅长Office、WPS等办公软件的使用”,没啥意义

Qt creator 编译错误:无法解析的外部符号(命令)

好儿郎-志在四方:亲测可用。

公司简介|招贤纳士|广告服务|银行汇款帐号|联系方式|版权声明|法律顾问|问题报告|合作伙伴|论坛反馈网站客服杂志客服微博客服webmaster@400-600-2320|北京创新乐知信息技术有限公司 版权所有|江苏乐知网络技术有限公司 提供商务支持京ICP证09002463号|Copyright © 1999-, , All Rights Reserved 您有5条新通知

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。