2

次のクラスを検討してください。

class A {
   public:
   A( std::string param = "123" ) {} 
};

class B : public A{ 
   public: 
   B() : A() {}
   B( std::string param ) : A( param ) {}
};

A の既定のパラメーター値が使用されていることを確認するために、これよりも良い方法はありますか? 文字列パラメーターを提供するかどうかに関係なく、誰かが B を構築できるようにしたいと考えています。

4

1 に答える 1

2

正確に何を望んでいるかによって、それが最良のオプションかもしれません (ベースのデフォルト パラメーターの変更が派生型ですぐに反映されるようにしたい場合)。そうでない場合は、同じアプローチを使用できます。ベースで:

class B : public A {
public:
   B(std::string const & arg = "123") : A(arg) {}
// ...

この場合、基本型の値を変更した場合は、派生型の既定値を更新することを忘れないでください。それを定数に因数分解することもできます。

const char* defaultParam = "123";
class A {
public:
   A(std::string const& s=defaultParam) // ...
//...
};
class B : public A {
public:
   B(std::string const& s=defaultParam) : A(s) {}
//...
于 2013-02-23T05:22:18.900 に答える