引言

此文记录以下虚函数和继承的一个示例。

示例

class Base
{virtual void method(){std::cout<<"from base"<<std::endl;}
public:virtual ~Base(){method();}void baseMethod(){method();}
};class A:public Base
{void method(){std::cout<<"from A"<<std::endl;}
public:~A(){method();}
};int _tmain(int argc, _TCHAR* argv[])
{Base *base = new A;base->baseMethod();delete base;system("pause");return 0;
}

以上的示例是我在某公司面试的时候做的笔试题,自己果断掉坑,虽然考查的点都知道,还是理解的不够透彻。程序正确的输出结果是:

分析如下:
base->baseMethod();调用该函数的时候,baseMethod()属于父类自己的函数,直接调用,但是在函数baseMethod()定义中调用了method()函数,method()是虚函数,这时候就会调用子类的method()函数而不是父类的method()函数,所以输出from A。接下来函数执行delete base;我们知道当有继承关系的两个类,当构造子类对象的时候,先调用父类的构造函数在调用子类的构造函数,析构的时候恰好相反,先调用子类的析构函数再调用父类的析构函数,这里先调用子类的析构~A(){method();},在子类的析构函数中调用子类自己的method();函数,输出from A,然后调用父类的析构函数~Base(){method();}在父类的析构函数中调用自己的函数method();输出from base。这里析构的时候与虚函数是没有关系的,这里只是继承关系,故而各自析构各自的,调用自己的method()类。

C++中继承与虚函数示例相关推荐

  1. C++中的继承与虚函数各种概念

    虚继承与一般继承 虚继承和一般的继承不同,一般的继承,在目前大多数的C++编译器实现的对象模型中,派生类对象会直接包含基类对象的字段.而虚继承的情况,派生类对象不会直接包含基类对象的字段,而是通过一个 ...

  2. Visual C++ 2008入门经典 第九章类的继承和虚函数

    // 第九章类的继承和虚函数 //.cpp: 主项目文件. //1 继承如何与面向对像的编程思想适应 //2 根据现有类定义新类 //3 使用protected关键字为类成员指定新的访问特性 //4 ...

  3. c++虚继承和虚函数和抽象类、接口类,聚合类

    虚继承 虚继承用于解决多继承条件下的菱形继承问题(浪费存储空间.存在二义性). 底层实现原理与编译器相关,一般通过虚基类指针和虚基类表实现,每个虚继承的子类都有一个虚基类指针(占用一个指针的存储空间, ...

  4. C++编程思想:继承与虚函数以及多态

    文章目录 简介 实现虚函数多态的技术原理 对象切边 析构函数和构造函数中的虚函数 使用继承的类的析构函数应该使用虚函数修饰符 简介 继承与虚函数与多态是浑然一体的三个概念,父类中虚函数可以表现出多态特 ...

  5. C++_虚继承_虚函数_纯虚函数(多继承的二义性,多态)

    基本信息 每一个类都有一个虚表,以及虚表指针; 虚表的内容是编译器决定的,虚表中用于存放虚函数的指针, 程序运行时的类型信息等; 每个多态对象都存放着一个指向当前类型的虚表的指针, 该指针在构造函数中 ...

  6. 抽象类的继承/纯虚函数的实现

    纯虚函数是指类似 virtual void Do()=0 的函数,含有纯虚函数的类是抽象类,不能实例化对象,其子类需实现所有纯虚函数方能实例化对象. 以上面向对象的规则读者应该都比较清楚,但有个问题大 ...

  7. 问题十五:C++中抽象类,虚函数是什么鬼?怎么测试

    该篇内容提要: 1,理论解释,来自网上: 2,测试两个子类对父类虚函数的实现. 15.1 抽象类.虚函数是什么鬼? http://www.cnblogs.com/dongsheng/p/3343939 ...

  8. C++虚继承与虚函数

    虚继承和虚函数是完全无相关的两个概念. 虚继承是解决C++多重继承问题的一种手段,从不同途径继承来的同一基类,会在子类中存在多份拷贝.这将存在两个问题:其一,浪费存储空间:第二,存在二义性问题,通常可 ...

  9. C++中的out-of-line虚函数

    ------问题很多,正在修改----- 引子 在现实编码过程中,曾经遇到过这样的问题"warning:'Base' has no out-of-line method definition ...

最新文章

  1. [C#]ASP.NET MVC 3 在线学习资料
  2. GitHub 致歉:请再爱我们一次!
  3. python处理excel表格实例-python2 对excel表格操作完整示例
  4. 开源数据库连接池之Tomcat内置连接池
  5. 微信小程序左到右联动
  6. Python练习题 001:4个数字求不重复的3位数
  7. 手机端刷recovery工具_MIUI/REDMIN手机玩机汇集
  8. Collection中list集合的应用常见的方法
  9. webstorm 内存溢出怎么弄_webstrom 内存溢出,软件崩溃卡死解决的方法
  10. rsa前后端加密流程_不懂前后端分离?这篇就够了
  11. IE下get传中文乱码的问题完美解决方案
  12. Python3列表、元组及之间的区别和转换
  13. C++ 类对象和 指针的区别
  14. java 汉字乱码_Java中文乱码问题
  15. PDF转图片文字丢失问题解决
  16. acdsee ultimate 2020 特别版 v13.0附安装教程
  17. WebUploader 设置单个图片上传
  18. ele组件JS弹框(确定或取消操作)
  19. html背景图片大小嵌套,div嵌套div 背景图片 不显示的问题
  20. 白话大数据与机器学习——阅读笔记

热门文章

  1. Python-OpenCV 处理图像(一):基本操作 cv2
  2. 淘宝直播在智能互动领域的探索及落地
  3. 自研云原生数据仓库AnalyticDB再破权威评测TPC-DS世界纪录
  4. 支付宝王益:40岁写30年代码是一种什么体验?
  5. 新零售基础设施 看阿里巴巴如何打“地基”
  6. Kubernetes Ingress 高可靠部署最佳实践
  7. 指数级暴增、复杂场景下,揭秘百度云原生湖仓架构等系列数据产品
  8. 剪了 20% 的刘海、120Hz 刷新率、1TB 存储,iPhone 13 来了!
  9. 你的项目是否真的需要 DevOps?
  10. 泪目!连拿3份 offer,AI 程序员求职经历火爆 IT圈!