引子:

阿里的一道题:

 #include <IOSTREAM>
 using namespace std;

 class A{
 public:
     )
     {
         cout<<"a~"<<val<<endl;
     }

     virtual void test()
     {
         func();
     }
 };
 class B: public A{
 public:
     )
     {
         cout<<"b~"<<val<<endl;
     }

 };

 int main()
 {
     B *b = new B();
     B c;
     b->test();
     system("pause");
 }

这里输出的答案是:b~0

在effective C++中,的条款37中说绝不重新定义继承而来的缺省参数值

virtual函数是动态绑定的,而缺省参数值却是静态绑定的。

调用一个定义于derived的虚函数的同时,却可能会使用base为他指定的缺省参数值。

这主要是为了保证运行效率,在编译(前期)的时候就已经给他静态的绑定了声明时的静态类型所给定的值。

《effective C++》:条款37——绝不重新定义继承而来的缺省参数值的更多相关文章

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

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

  2. Effective C++ -----条款37:绝不重新定义继承而来的缺省参数值

    绝对不要重新定义一个继承而来的缺省参数值,因为缺省参数值都是静态绑定,而virtual函数-----你唯一应该覆写的东西-----却是动态绑定.

  3. 条款37:绝不重新定义继承而来的缺省参数值(Never redefine a function's inherited default parameter value)

    NOTE: 1.绝不重新定义一个继承而来的缺省参数值,因为缺省参数值都是静态绑定的,而virtual 函数-----你唯一应该覆盖的东西----却是动态绑定的.

  4. 读书笔记_Effective_C++_条款三十七:绝不重新定义继承而来的缺省参数值

    先看下面的例子: enum MyColor { RED, GREEN, BLUE, }; class Shape { public: ; }; class Rectangle: public Shap ...

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

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

  6. 《effective C++》:条款36——绝不重新定义继承而来的非虚函数

    (1)当派生类中重写了基类的非虚函数时,这个时候这个函数发生的是静态绑定 下面中的代码中: 定义一个基类B,基类定义了函数fcm,fcm是非虚的函数. 定义一个派生类D,派生类重新定义了fcm. 当用 ...

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

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

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

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

  9. c++ 切勿重新定义继承来的带缺省参数的函数

    切勿重新定义继承来的带缺省参数的函数.我们知道,继承来的函数是virtual 的,至于原因在上一节中已经说明了,即“切勿重新定义父类non-virtual函数”.所以确切的描述应该是“切勿重新定义继承 ...

随机推荐

  1. 如何在win7、win8、win8.1上安装使用vb6.0

    https://jingyan.baidu.com/article/915fc414fdf8fb51384b2062.html如何在win7.win8.win8.1上安装使用vb6.0 如何在win7 ...

  2. 推荐一个以动画效果显示github提交记录的黑科技工具:Gource

    程序员每天都会使用到git的一系列命令.其中用git log命令可以查看提交历史记录: 今天Jerry给大家推荐一款视觉效果非常酷炫的工具,名叫Gource,是一个能够将git代码仓库的提交历史以动画 ...

  3. MongoDB最简单的入门教程之一 环境搭建

    MongoDB是近年来非常流行的一个介于关系数据库和非关系数据库之间的解决方案,特别广泛地应用于国内很多互联网公司,是非关系数据库当中功能最丰富,最像关系数据库的. MongoDB支持的数据结构非常松 ...

  4. Windows程序设计2(消息机制、菜单)

    一 .小记; PostQuitMessage(0); 产生WM_QUIT消息给进程队列,且立即返回,同时使得消息循环退出,使得进程终止.(其实它通过PostMessage(hWnd,WM_QUIT,0 ...

  5. Urlrewritefilte

    Urlrewritefilter是通过filter的形式,过滤所有的请求,然后再根据配置文件来转换成真正要访问的URL. 好处是隐藏真正的URL和美化提供给客户的URL. 比如,你的首页是www.** ...

  6. shell 数值比较和字符串比较

    1. 数值比较 -eq        是否相等(equal) -gt         是否大于(greater than) -ge       是否大于等于(greater and equal tha ...

  7. Linux一些常用小命令

    使用xshell连接虚拟机 rz 上传的linux服务器 sz 从服务器上下载 df 查看磁盘大小 -h du 查看所有磁盘(硬盘)大小(-h 可读  -s统计当前目录的大小)du -sh free ...

  8. dircolors - 设置‘ls'显示结果的颜色

    SYNOPSIS[总览] dircolors [-b] [--sh] [--bourne-shell] [-c] [--csh] [--c-shell] [-p] [--print-database] ...

  9. Linux-RedHat7.2 安装.net core2.0

    1.添加dotnet产品Feed sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc sudo sh -c 'ech ...

  10. 高逼格关闭Win10防火墙

    作为一个开发人员,你还需要进入这个界面来关闭防火墙么? 如果是,那么现在,我将为大家介绍一种高逼格的方式: 第一步: 打开Windows PowerShell(管理员) 第二步:查看当前防火墙状态:n ...