一、看一个隐藏non-virtual函数的例子

  • 假设class D以public的方式继承于class B,代码如下:

class B {public:void mf();};class D :public B {};int main(){D x;B *pB = &x;pB->mf();   //调用B::mf()D *pD = &x;pD->mf();   //调用D::mf()return 0;}

二、静态绑定与动态绑定

  • 关于静态绑定、动态绑定的概念之前,大家先了解下静态类型的类变量和动态类型的类变量概念和区别。

    • 静态类型的类变量:在编译时就已经知道是什么类型的了

    • 动态类型的类变量:自己所指的类型不明确,直到运行时才知道

  • 如果表达式既不是引用也不是指针,那么其就没有静态类型和动态类型的概念,因为其只能与自己类型一致的对象绑定到一起

演示案例

  • 当我们使用基类的引用(或指针)时,我们并不清楚该引用(或指针)所绑定的对象的真实类型,该对象可能是基类的对象,也可能是派生类的对象。只有在程序运行的时候我们才知道所绑定的对象的真实类型

class A {};
class B:public A{};
int main()
{
A a;  

C++:46---绝不重新定义继承而来的non-virtual函数相关推荐

  1. 绝不重新定义继承而来的缺省值参数

    绝不重新定义继承而来的缺省值参数 文章目录 绝不重新定义继承而来的缺省值参数 一.问题引入 二.结论 一.问题引入 在C++中,只能继承两种函数:虚(virtual)函数和非虚(non-virtual ...

  2. C++绝不在构造和析构过程中调用virtual函数

    绝不在构造和析构过程中调用virtual函数 如果希望在继承体系中根据类型在构建对象时表现出不同行为,可以会想到在基类的构造函数中调用一个虚函数: class Transaction { //所有交易 ...

  3. Effective C++条款09:绝不在构造和析构过程中调用virtual函数

    Effective C++条款09:绝不在构造和析构过程中调用virtual函数(Never call virtual functions during construction or destruc ...

  4. C++对象内存布局--③测试多继承中派生类的虚函数在哪一张虚函数表中

    C++对象内存布局--③测试多继承中派生类的虚函数在哪一张虚函数表中 测试2:证明派生类的虚函数的地址跟第一基类的虚函数地址保存在同一张虚函数表中. 派生类有多少个拥有虚函数的基类,派生类对象就有多少 ...

  5. Node.js: 如何继承 events 自定义事件及触发函数

    events 是node.js的核心api ,几乎大部分node.js 的api都继承 events 类(javascript中没有类,也不存在继承,确切说是模拟类和继承,点击查看) 比如我们常见的 ...

  6. C++:47---绝不重新定义继承而来的缺省参数值

    一.静态类型.动态类型 静态类型:在被声明时所采用的的类型 动态类型:目前所知对象的类型 演示案例 下面是一个继承体系 class Shape {public:enum ShapeColor { Re ...

  7. 继承和多态 2.0 -- 继承的六个默认成员函数

    本文重要介绍普通继承中如何写派生类的六个默认成员函数,主要是针对在派生类中,如何调用基类的六个默认成员函数 需要说明的一点就是,如果子类中没有调用父类的函数时,系统会自动生成一个. 构造函数 子类中有 ...

  8. 子类继承父类后调用virtual函数问题(base.函数名)

    void Main() { SonB s = new SonB();             s.Show();//先调用子类的函数,再调用基类的函数(在子类方法中base.Show()),一共mes ...

  9. java 成员函数_Java继承中成员变量和成员函数的覆盖

    关于继承中变量和方法的覆盖: 1, 与基类中同名的变量,会被派生类所覆盖(同时存在但是有独立的值),直接取值将是派生类的值,但是基类的变量也是同时存在的.如果通过派生类函数访问,得到派生类的值.如果通 ...

最新文章

  1. vscode浏览器打开html
  2. 关于JavaScript的编译原理
  3. 第九十七期:新版Kite:实时补全代码,Python之父都发声力挺!
  4. python中测试字符串类型的函数_Python新手学习基础之数据类型——字符串类型
  5. 贪心算法的几种经典例题
  6. 高等代数-三-消元法
  7. 易语言新手入门教程第十三课 - 制作QQ自动登录器
  8. 网络开盘选房微信抢房软件下载及使用教程
  9. Pycharm处理 E501 line too long 警告
  10. BAT添加共享打印机
  11. 计算机心理测试题,心理测验丨测试你隐藏的懒人指数?
  12. linux连接蓝牙设备,Linux 下连接蓝牙设备
  13. vue+js input文本框输入时自动填充邮箱后缀组件封装
  14. JavaScript 案例综合提升
  15. python hdf5_使用Python将大量数字写入HDF5文件
  16. Sphinx生成PDF
  17. 虚拟串口VSPD_V10.0.944官方最新版
  18. Markdown取消超链接的下划线
  19. 实用教程:如何在电脑上安装安卓应用程序
  20. 监理公司需要计算机专业吗,信息化工程监理与建筑行业监理的区别

热门文章

  1. matlab项目实例教程,matlab简明实例教程.doc
  2. 如何将多个源文件编译为一个.ko
  3. Linux之V4L2基础编程
  4. 在 WinCe 平台读写 ini 文件
  5. mysql卸载完环境变量还有_MySql完全卸载
  6. 【转】VScode快捷键(超无敌详细版)
  7. 【转】VS工具:实时可视化树
  8. 【转】C#与C++的发展历程第一 - 由C#3.0起
  9. 【转】深入浅出OOP(六): 理解C#的Enums
  10. 第五节:泛型(泛型类、接口、方法、委托、泛型约束、泛型缓存、逆变和协变)