6

1つのパラメーター(文字列)を必要とするコンストラクターを持つ基本クラスがあります。次に、独自のコンストラクターを持つ派生クラスがあります。派生クラスをインスタンス化し、基本クラスのコンストラクターのパラメーターも設定できるようにしたい。

class BaseClass {
    public:
        BaseClass (string a);
};

class DerivedClass : public BaseClass {
    public:
        DerivedClass (string b);
};

int main() {
    DerivedClass abc ("Hello");
}

派生クラスを呼び出すときに、基本クラスのコンストラクターのパラメーターを設定する方法がわかりません。

4

3 に答える 3

11

2つの可能性があります-インライン:

class DerivedClass : public BaseClass {
public:
    DerivedClass (string b) : BaseClass(b) {}
};

またはライン外:

class DerivedClass : public BaseClass {
public:
    DerivedClass (string b);
};

/* ... */
DerivedClass::DerivedClass(string b) : BaseClass(b)
{}

その他の例:

class DerivedClass : public BaseClass {
public:
    DerivedClass(int a, string b, string c);

private:
    int x;
};

DerivedClass::DerivedClass(int a, string b, string c) : BaseClass(b + c), x(a)
{}

初期化子リスト:

class MyType {
public:
    MyType(int val) { myVal = val; }    // needs int
private:
    int myVal;
};

class DerivedClass : public BaseClass {
public:
    DerivedClass(int a, string b) : BaseClass(b)
    {  x = a;  }   // error, this tries to assign 'a' to default-constructed 'x'
                   // but MyType doesn't have default constructor

    DerivedClass(int a, string b) : BaseClass(b), x(a)
    {}             // this is the way to do it
private:
    MyType x;
};
于 2012-08-20T21:14:14.667 に答える
3

基本クラスコンストラクターに渡す単一のパラメーターから派生クラスインスタンスを構築するだけの場合は、次のことができます。

C ++ 03(明示的に追加し、const参照を渡します):

class DerivedClass : public BaseClass {
    public:
        explicit DerivedClass (const std::string& b) : BaseClass(b) {}
};

C ++ 11(すべての基本クラスコンストラクターを取得します):

class DerivedClass : public BaseClass {
public:
    using BaseClass::BaseClass;
};

DerivedClassのコンストラクターを呼び出して、BaseClassコンストラクターを他の値に呼び出す場合は、次のようにすることもできます。

class DerivedClass : public BaseClass {
    public:
        explicit DerivedClass () : BaseClass("Hello, World!") {}
};
于 2012-08-20T21:21:50.477 に答える
0

これを使って

 DerivedClass::DerivedClass(string b)
     : BaseClass(b)
 {
 }

パラメータを基本クラスのコンストラクタに直接渡すだけです

于 2012-08-20T21:15:43.720 に答える