C++デフォルトパラメータ付き虚関数
734 ワード
C++コンパイラでは、既定のパラメータは静的にバインドされています.
関数の場合
プログラムにfunc(1)呼び出しが表示された場合.コンパイラは次のようなコードを生成します.
テストコード:
出力:
Derived: 1
分析:
ベースクラスポインタbtrでfが呼び出されるため、コンパイラはベースクラスで指定されたデフォルトパラメータ1を選択します.
関数の場合
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を選択します.