1

派生クラスのインスタンスを新規作成するときに、コンストラクターのパラメーターを基本クラスに提供する方法はありますか? (つまり、基本クラスのコンストラクターにこれらのパラメーターの既定値がある場合)

例えば

class Base
{
public:
 Base::Base( string name = "" )
 : m_name( name ) {};

private
 string m_name;
};

class Derived : public Base
{
public:
 Derived::Derived() {};
};

次に、次のようなことをする必要があります。

void main()
{
 Base* instance = new Derived( "Jeff" );
};

これは明らかに機能しません。派生インスタンスを新規作成し、派生クラス コンストラクターでそのパラメーターを提供することなく、コンストラクター パラメーターをそのベースに提供する方法はありますか。

4

2 に答える 2

2

派生インスタンスを新規作成し、派生クラス コンストラクターでそのパラメーターを提供することなく、コンストラクター パラメーターをそのベースに提供する方法はありますか。

いいえ。

派生クラスのコンストラクターは引数を受け取り、それらを明示的に基底クラスのコンストラクターに渡す必要があります。

class Derived : public Base
{
public:
 Derived::Derived(string name) : Base(name) {};
};

これは、使用しているかどうかに関係なく当てはまりますnew

于 2012-07-04T19:37:34.337 に答える
1

個別の名前を基本クラスに入れたい場合はできません。ただし、個別の名前は基準ではありません。定数リテラルを次のように渡すことで実行できます。

class Base
{
public:
 Base::Base( string name = "" )
 : m_name( name ) {};

private
 string m_name;
};

class Derived : public Base
{
public:
 Derived::Derived() : Base ("Jeff")    {};
 Derived::Derived(string &name) : Base (name) {};
};

または、派生クラスのコンストラクターにデフォルト値を渡します。

class Derived : public Base
    {
    public:
     Derived::Derived(string name = "Jeff") : Base (name) {};
    };
于 2012-07-04T19:58:57.353 に答える