Effective C++条項37解読:継承されたデフォルトパラメータ値を再定義しない(2012年某会社筆記試験問題)


簡単だが間違いやすいテーマを見てみましょう.
#include
using namespace std;

class A
{
public:
	virtual void fun(int n = 1)
	{
		cout << "A--->" << n << endl; 
	}
};

class B : public A
{
public:
	virtual void fun(int n = 2)
	{
		cout << "B--->" << n << endl; 
	}
};


int main()
{
	A *p;
	B b;
	p = &b;
	p->fun();

	return 0;
}
少しC++多態を知っている人は、答えはB--->2だと思っているかもしれませんが、実は答えはB--->1です.どうしてですか.虚関数は動的にバインドされていますが、デフォルトのパラメータ値は確かに静的にバインドされています.そこで、上記のような誤った理解を避けるために、C++大牛Scott Meyersは有名なEffective C++の中で次のような言葉を言いました.
Effective C++は、継承されたデフォルトパラメータ値を再定義しないと言います.
はい、私はもっと多くのクラスの斧を弄しません.具体的な詳細を知っている友达が必要です.この経典の作品を参考にすることができます.