38項 継承したデフォルトパラメータ値を再定義してはならない

継承したデフォルトパラメータ値を再定義してはならない

基底クラスの仮想関数のデフォルトパラメータと、サブクラスの継承された関数のデフォルトパラメータが違う場合、基底クラスの仮想関数のデフォルトパラメータが継承された関数にも適用されます。


具体例は下記

class B
{
public:
	virtual void func(const char *p = "Base\n"){ std::cout << p; }
};

class D : public B
{
public:
	virtual void func(const char *p = "Derived\n"){ std::cout << p; }
};

int main()
{
	B *pb = &B();
	pb->func();
	pb = &D(); //デフォルト演算子は"Derived\n"のように見えるが
	pb->func(); //デフォルト演算子は基底クラスの"Base\n"である。