C++中继承与虚函数示例
引言
此文记录以下虚函数和继承的一个示例。
示例
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++中继承与虚函数示例相关推荐
- C++中的继承与虚函数各种概念
虚继承与一般继承 虚继承和一般的继承不同,一般的继承,在目前大多数的C++编译器实现的对象模型中,派生类对象会直接包含基类对象的字段.而虚继承的情况,派生类对象不会直接包含基类对象的字段,而是通过一个 ...
- Visual C++ 2008入门经典 第九章类的继承和虚函数
// 第九章类的继承和虚函数 //.cpp: 主项目文件. //1 继承如何与面向对像的编程思想适应 //2 根据现有类定义新类 //3 使用protected关键字为类成员指定新的访问特性 //4 ...
- c++虚继承和虚函数和抽象类、接口类,聚合类
虚继承 虚继承用于解决多继承条件下的菱形继承问题(浪费存储空间.存在二义性). 底层实现原理与编译器相关,一般通过虚基类指针和虚基类表实现,每个虚继承的子类都有一个虚基类指针(占用一个指针的存储空间, ...
- C++编程思想:继承与虚函数以及多态
文章目录 简介 实现虚函数多态的技术原理 对象切边 析构函数和构造函数中的虚函数 使用继承的类的析构函数应该使用虚函数修饰符 简介 继承与虚函数与多态是浑然一体的三个概念,父类中虚函数可以表现出多态特 ...
- C++_虚继承_虚函数_纯虚函数(多继承的二义性,多态)
基本信息 每一个类都有一个虚表,以及虚表指针; 虚表的内容是编译器决定的,虚表中用于存放虚函数的指针, 程序运行时的类型信息等; 每个多态对象都存放着一个指向当前类型的虚表的指针, 该指针在构造函数中 ...
- 抽象类的继承/纯虚函数的实现
纯虚函数是指类似 virtual void Do()=0 的函数,含有纯虚函数的类是抽象类,不能实例化对象,其子类需实现所有纯虚函数方能实例化对象. 以上面向对象的规则读者应该都比较清楚,但有个问题大 ...
- 问题十五:C++中抽象类,虚函数是什么鬼?怎么测试
该篇内容提要: 1,理论解释,来自网上: 2,测试两个子类对父类虚函数的实现. 15.1 抽象类.虚函数是什么鬼? http://www.cnblogs.com/dongsheng/p/3343939 ...
- C++虚继承与虚函数
虚继承和虚函数是完全无相关的两个概念. 虚继承是解决C++多重继承问题的一种手段,从不同途径继承来的同一基类,会在子类中存在多份拷贝.这将存在两个问题:其一,浪费存储空间:第二,存在二义性问题,通常可 ...
- C++中的out-of-line虚函数
------问题很多,正在修改----- 引子 在现实编码过程中,曾经遇到过这样的问题"warning:'Base' has no out-of-line method definition ...
最新文章
- [C#]ASP.NET MVC 3 在线学习资料
- GitHub 致歉:请再爱我们一次!
- python处理excel表格实例-python2 对excel表格操作完整示例
- 开源数据库连接池之Tomcat内置连接池
- 微信小程序左到右联动
- Python练习题 001:4个数字求不重复的3位数
- 手机端刷recovery工具_MIUI/REDMIN手机玩机汇集
- Collection中list集合的应用常见的方法
- webstorm 内存溢出怎么弄_webstrom 内存溢出,软件崩溃卡死解决的方法
- rsa前后端加密流程_不懂前后端分离?这篇就够了
- IE下get传中文乱码的问题完美解决方案
- Python3列表、元组及之间的区别和转换
- C++ 类对象和 指针的区别
- java 汉字乱码_Java中文乱码问题
- PDF转图片文字丢失问题解决
- acdsee ultimate 2020 特别版 v13.0附安装教程
- WebUploader 设置单个图片上传
- ele组件JS弹框(确定或取消操作)
- html背景图片大小嵌套,div嵌套div 背景图片 不显示的问题
- 白话大数据与机器学习——阅读笔记
热门文章
- Python-OpenCV 处理图像(一):基本操作 cv2
- 淘宝直播在智能互动领域的探索及落地
- 自研云原生数据仓库AnalyticDB再破权威评测TPC-DS世界纪录
- 支付宝王益:40岁写30年代码是一种什么体验?
- 新零售基础设施 看阿里巴巴如何打“地基”
- Kubernetes Ingress 高可靠部署最佳实践
- 指数级暴增、复杂场景下,揭秘百度云原生湖仓架构等系列数据产品
- 剪了 20% 的刘海、120Hz 刷新率、1TB 存储,iPhone 13 来了!
- 你的项目是否真的需要 DevOps?
- 泪目!连拿3份 offer,AI 程序员求职经历火爆 IT圈!