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"である。