(1)当派生类中重写了基类的非虚函数时,这个时候这个函数发生的是静态绑定

下面中的代码中:

定义一个基类B,基类定义了函数fcm,fcm是非虚的函数。

定义一个派生类D,派生类重新定义了fcm。

当用基类的指针指向派生类对象,调用fcm时,调用的是基类的函数。

 #include<iostream>
 using namespace std;
 class B
 {
 public:
     void fcm()
     {
         cout<<"B::fcm"<<endl;
     }
 };

 class D:public B{
 public:
     void fcm()
     {
         cout<<"D::fcm"<<endl;
     }
 };

 int main()
 {
     D d;
     B* ptrB=&d;
     D* ptrD=&d;
     ptrB->fcm();//B::fcm
     ptrD->fcm();//D::fcm

     B b;
     b.fcm();
     d.fcm();
     system("pause");
 }

《effective C++》:条款36——绝不重新定义继承而来的非虚函数的更多相关文章

  1. 读书笔记 effective c++ Item 36 永远不要重新定义继承而来的非虚函数

    1. 为什么不要重新定义继承而来的非虚函数——实际论证 假设我告诉你一个类D public继承类B,在类B中定义了一个public成员函数mf.Mf的参数和返回类型并不重要,所以假设它们都是void. ...

  2. [条款36]绝不重新定义继承而来的non-virtual函数

    看下面的两个类的声明代码: class B { public: void mf(); //something to do }; class D : public B { public: void mf ...

  3. 《effective C++》:条款37——绝不重新定义继承而来的缺省参数值

    引子: 阿里的一道题: #include <IOSTREAM> using namespace std; class A{ public: ) { cout<<"a~ ...

  4. 【36】绝不重新定义继承而来的non-virtual方法

    1.绝不重新定义继承而来的non-virtual方法,为什么? 首先想想,non-virtual方法是干什么的?也就是说,它的使用场景.父类的non-virtual方法,其实就是告诉子类,继承实现,子 ...

  5. 读书笔记_Effective_C++_条款三十六:绝不重新定义继承而来的non-virtual函数

    这个条款的内容很简单,见下面的示例: class BaseClass { public: void NonVirtualFunction() { cout << "BaseCla ...

  6. C++ 静态绑定与动态绑定------绝不重新定义继承而来的缺省参数

    在了解静态绑定和动态绑定之前,先了解什么是对象的静态类型,什么是对象的动态类型. 对象的静态类型:对象在声明时采用的类型.是在编译器决定的. 对象的动态类型:目前所指对象的类型.是在运行期决定的. 动 ...

  7. [EffectiveC++]item37:绝不重新定义继承而来的缺省参数值

    绝不重新定义继承而来的缺省参数值 静态类型 动态类型

  8. Effective C++ -----条款36:绝不重新定义继承而来的non-virtual函数

    绝对不要重新定义继承而来的non-virtual函数.

  9. 条款36:绝不重新定义继承而来的non-virtual函数(Never redefine an inherited non-virtual function)

    NOTE: 1.绝对不要重新定义继承而来的non-virtual函数.

随机推荐

  1. VBScript(一)

    visual basic Script 好像是以个老掉牙的服务器端脚本语言,低版本的IE浏览器支持在浏览器里执行 几个特点 1. 大小写不敏感 2.在服务器端 inputBox, msgBox不被支持 ...

  2. android studio MQTT测试成功

    package myself.mqtt.wenzheng.studio.mqtt; import android.app.Notification; import android.app.Notifi ...

  3. The lion king 经典句型摘录

    What am I going to do with him? Everything the light touches is our kingdom. But I thought a king ca ...

  4. Load average in Linux的精确含义

    Man 上的解释: load average System load averages is the average number of processes that are either in a ...

  5. Mac上安装Homebrew和wget

    实际上是使用Homebrew来安装wget 安装Homebrew Homebrew一般称为brew,是Mac OSX上的软件包管理工具,能在Mac中方便的安装软件或者卸载软件, 只需要一个命令, 非常 ...

  6. vue跨域解决及打包

    打包之前需要修改如下配置文件: 配置文件一:build>>>utils.js (修改publicPath:"../../" , 这样写是处理打包后找不到静态文件( ...

  7. 伪类的格式重点:父标签层级 & 当前标签类型

    伪类的格式重点:父标签层级 & 当前标签类型 通过例子说明: css1: span:nth-of-type(2){color: red;} css2: span :nth-of-type(2) ...

  8. Linux OpenGL 实践篇-10-framebuffer

    在之前的实践中我们都是在当前的窗口中渲染,即使用的缓存都是由glutCreateWindow时创建的缓存,我们可称之为默认缓存.它是唯一一个可以被图形服务器的显示系统识别的帧缓存,我们在屏幕上看到的只 ...

  9. Two-Phase Commit (2PC)

    两阶段提交模式像极了比赛发令:“预备,开始!”

  10. 联玛客(T 面试)

    我看你写的项目都是SSM架构,那我们就来聊下Spring 1.Spring的生命周期,与生命周期相关的事件? 2.阿里巴巴开发手册中的规范有哪些? 切到了异常捕捉话题 3.线程你有了解吗? 创建线程的 ...