zoukankan      html  css  js  c++  java
  • 为什么会是这样的输出结果

    #include<iostream>
    using namespace std;

    class Base
    {
    public:
     virtual void g( int i = 10 )
     {
      cout << i << endl;
     };
    };

    class Derived: public Base
    {
    public:
     void g( int i = 20 )
     {
      cout << "Derived::g() " << i << endl;
     }
    };

    int main()
    {
     Base*   pb = new Derived;
     pb->g();
     delete pb;
     return 0;
    }

    输出结果:

    Derived::g() 10

    Why?

    C++提供简单的处理办法,给形参一个默认值,这样形参就不必一定要从实参取值了。

    实参与形参的结合是从左至右顺序进行的,第1个实参必须与第1个形参结合,第2个实参必须与第2个形参结合……,因此指定默认值的参数必须放在形参表列中的最右端,否则出错。

    声明函数时已对形参给出了默认值,而在定义函数时又对形参给出默认值,有的编译系统会给出“重复指定默认值”的报错信息,而有的编译系统对此不报错,甚至允许在声明时和定义时给出的默认值不同,此时编译系统以先遇到的为准。由于函数声明在函数定义之前,因此以声明时给出的默认值为准,而忽略定义函数时给出的默认值。

      对于虚函数,编译系统将在编译时刻根据被调用函数的对象的类型决定默认形参的值。

  • 相关阅读:
    负环操作 的队列
    The Prices(有依赖性的状压dp)(去不同商店买东西先花不同路费)
    BFS
    滚动数组(细节)(坑点)
    P1908 逆序对(细节)(树状数组解法)
    head
    DaoVoice JS 代码接入示例
    DaoVoice JS 代码接入示例
    DaoVoice JS 代码接入示例
    DaoVoice JS 代码接入示例
  • 原文地址:https://www.cnblogs.com/BeyondTechnology/p/1834097.html
Copyright © 2011-2022 走看看