C++デフォルトパラメータ付き虚関数

734 ワード

C++コンパイラでは、既定のパラメータは静的にバインドされています.
関数の場合
void func(int x, int y = 2);

プログラムにfunc(1)呼び出しが表示された場合.コンパイラは次のようなコードを生成します.
push 2;//    
push 1;//x    
call func

テストコード:
#include<iostream>
using namespace std;
class Base
{
public:
  virtual void f(int x = 1) {cout<<"Base: "<<x<<endl;}

};
class Derived: public Base
{
public:
  virtual void f(int x = 2) {cout<<"Derived: "<<x<<endl;}
};

int main()
{
  Base * btr = new Derived();
  btr->f();
  return 0;
}

出力:
Derived: 1
分析:
ベースクラスポインタbtrでfが呼び出されるため、コンパイラはベースクラスで指定されたデフォルトパラメータ1を選択します.