好儿郎~志在四方

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

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

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

标签: C++构造函数中调用虚函数
2016-10-17 16:07 68人阅读 评论(0) 收藏 举报

本文章已收录于:
分类:
C++程序设计浅尝(43)

作者同类文章X
  • C++:什么情况下需要将析构函数定义为虚函数?
  • C++编程经验分享
  • C、C++中使用const提高程序的健壮性和效率
  • C++中四种类型转换运算符的使用方法(reinterpret_cast,const_cast,static_cast,dynamic_cast)
  • 更多

目录(?)[+]

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

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

原文地址:http://blog.csdn.net/alex_my/article/details/44017509  ,感谢原作者总结分享

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

测试平台:VS2013 + 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++程序设计浅尝(43)
http://blog.csdn.net

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

更多文章

参考知识库

.NET知识库

1118关注|798收录

更多资料请参考:

猜你在找

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

  暂无评论
发表评论
  • 用 户 名:
  • qq_34556578
  • 评论内容:
  • HTML/XMLobjective-cDelphiRubyPHPC#C++JavaScriptVisual BasicPythonJavaCSSSQL其它
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

核心技术类目
全部主题HadoopAWS移动游戏JavaAndroidiOSSwift智能硬件DockerOpenStackVPNSparkERPIE10EclipseCRMJavaScript数据库UbuntuNFCWAPjQueryBIHTML5SpringApache.NETAPIHTMLSDKIISFedoraXMLLBSUnitySplashtopUMLcomponentsWindows MobileRailsQEMUKDECassandraCloudStackFTCcoremailOPhone CouchBase云计算iOS6Rackspace Web AppSpringSideMaemoCompuware大数据aptechPerlTornadoRubyHibernateThinkPHPHBasePureSolrAngularCloud FoundryRedisScalaDjangoBootstrap

  • 我的简介:
  • 姓名:何树培
    专注:C++、Qt程序开发
    专业:计算机科学与技术
    母校:四川理工学院

    联系我:
    我的QQ:913970877
    C++交流群: 302558294

  • 个人资料

  • 好儿郎-志在四方
    • 访问:149784次
    • 积分:4076
    • 等级:
      积分:4076
    • 排名:第5645名
    • 原创:211篇
    • 转载:44篇
    • 译文:2篇
    • 评论:155条
  • 博客专栏
  • Linux环境下C程序开发

    文章:24篇

    阅读:20601

    三级数据库等级考试

    文章:9篇

    阅读:4700

    蓝桥杯

    文章:21篇

    阅读:11503

  • 阅读排行
  • 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)
  • 文章存档
    • 2016年10月(18)
    • 2016年09月(12)
    • 2016年08月(10)
    • 2016年07月(19)
    • 2016年06月(24)
    • 2016年05月(34)
    • 2016年04月(32)
    • 2016年03月(30)
    • 2016年02月(11)
    • 2016年01月(26)
    • 2015年12月(11)
    • 2015年11月(9)
    • 2015年10月(5)
    • 2015年09月(13)
    • 2015年07月(2)
    • 2015年06月(1)
      展开
  • 文章搜索
  • 评论排行
  • 我的求职简历(大三学生)(22)
  • 试问蓝桥杯有多水,一道题就能回答你(吐槽,坑)(13)
  • 祝贺我的博客访问量过万(访问量:10260次)(13)
  • 学IT,看教程,看视频,你必须知道的学习网站(9)
  • C++面试题:三种数值交换方法(9)
  • Linux常用命令大搜罗、大总结(5)
  • 蓝桥杯 — 加法变乘法(把其中两个不相邻的加号变成乘号)(4)
  • Qt: qobject_cast<QPushButton*>(sender()) 简化信号与槽的编写(4)
  • 蓝桥杯 历届试题 核桃的数量(4)
  • 聚合与组合的区别(3)
  • 最新评论
  • 手把手教你:用Qt做一个漂亮的电子时钟(纯代码)

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

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

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

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

    miao19920101:我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++经典面试题

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

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

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

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

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

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

C++:构造函数中调用虚函数相关推荐

  1. C# 构造函数中调用虚函数

    C# 构造函数中调用虚函数 using System; using System.Diagnostics; using System.Text; using System.Collections; u ...

  2. C++中最好不要在构造函数和析构函数中调用虚函数!!!

    1.最好不要在基类和派生类的构造和析构函数中调用虚函数,不会出现多态性 实例如下: #include "iostream"using namespace std;class Bas ...

  3. C++学习笔记-----不要在构造函数和析构函数中调用虚函数

    考虑下面的程序: #include <iostream> using namespace std;class Base { public:Base() { cout << &q ...

  4. C++中最好不要在构造函数和析构函数中调用虚函数

    1.最好不要在基类和派生类的构造和析构函数中调用虚函数,不会出现多态性 实例如下: #include "iostream"using namespace std;class Bas ...

  5. (c++)5.4构造函数和析构函数中调用虚函数

    在构造函数和析构函数中调用虚函数时,采用静态联编(他们所调用的虚函数是自己类中定义的函数) 如果在自己类中没有实现这个虚函数,则调用的是基类中的虚函数,绝不会是任何在派生类中重定义的虚函数 //构造函 ...

  6. C++核心准则C.82:不要在构造函数或析构函数中调用虚函数

    C.82: Don't call virtual functions in constructors and destructors C.82:不要在构造函数或析构函数中调用虚函数 Reason(原因 ...

  7. 关于构造与析构过程中调用虚函数的问题

    今天面试碰到一个构造函数与析构函数中调用需虚函数的问题,当时不太确定,回来敲了一下,发现确实表现的不一样,在网上一查发现另有玄机. 代码: # gcc version 4.8.2 (Ubuntu 4. ...

  8. 不要在构造和析构函数中调用虚函数

    构造函数中不能有虚函数的原因: 原因一:基类构造期间虚函数不会下降到派生类阶段,也就是本身我们声明一个派生类对象,它应该先去调用基类的构造,若此时基类构造里面有虚函数,则这个虚函数是基类的虚函数,而不 ...

  9. C++对象模型8——构造函数和析构函数中对虚函数的调用、全局对象构造和析构、局部static数组的内存分配

    一.构造函数和析构函数中对虚函数的调用 仍然以https://blog.csdn.net/Master_Cui/article/details/109957302中的代码为例 base3构造函数和析构 ...

  10. 在构造函数/析构函数中调用virtual函数带来的影响

    在构造函数/析构函数中调用virtual函数,那么调用的一定是本类中的virtual函数. 先看一段代码: #include<iostream>class Base { public:Ba ...

最新文章

  1. javascript中new Date浏览器兼容性处理
  2. 第四章 对象的类型和动态绑定
  3. Windows下MariaDB数据库安装图文教程
  4. PAT_B_1035_Java(25分)
  5. ConcurrentHashMap的红黑树实现分析
  6. hp服务器增加raid卡,惠普ProLiant服务器Raid卡配置过程详解
  7. Spring Cloud Bus之RabbitMQ初窥
  8. php设计模式课程---9、桥接模式是什么
  9. GTX1060 6G是低端电脑显卡吗?
  10. php mysql addslashes_PHP函数 mysql_real_escape_string 与 addslashes 的区别
  11. python wordpress xmlrpc 调用_20542通过wordpress_xmlrpc的python包远程操作wordpress 编辑 更新Post...
  12. allgro显示网络名称_起名||网络公司名字推荐
  13. Contiki源码+原理+功能+编程+移植+驱动+网络(转)
  14. php 文件上传$_FILES中error返回值详解
  15. (转)PLSQL Developer 12.0.7连接Oracle12c数据库
  16. 地表温度数据、LST温度数据、地表反照率、NDVI数据、NPP数据、植被覆盖度、土地利用数据
  17. 【DB】数据库面试笔试题库及详解(小麦苗DBA宝典出品)--数据库运维宝典
  18. java jacob pdf_java-使用Jacob实现office转换成pdf
  19. 同步软件、网络同步、备份、分享工具
  20. Java实现 LeetCode 764 最大加号标志(暴力递推)

热门文章

  1. Instagram第三方接入
  2. WIN10下Apache启动失败
  3. 修改页面变成灰色代码修改方法
  4. 波波腾机器人_加入 Beta 版“机器人bobo” - TestFlight - Apple
  5. oracle包与实体包,实体oracle数据库学习
  6. Python012--python3.7在本地及虚拟机上的安装与配置
  7. STM32库内程序一些好的编程思路、方法及好的程序
  8. C++ 独木舟旅游活动
  9. C语言程序——用星号打印图案
  10. win7系统同步服务器,win7自动同步服务器