2

私はC++であまりコーディングしていないので、これが些細なことであるなら許してください。

私のクラス「Foo」は次のようになります。

class Foo {
    public: Foo(int n) { }
};

別のクラス「Bar」には、タイプ「Foo」のクラスメンバーが含まれることになっています。

class Bar {
    private: Foo f;
};

引数を必要としない「Foo」のコンストラクターがないため、これは明らかに失敗します。ただし、Foo f(1);失敗するようなものもあります。

この問題を解決する方法はありますか?それとも、ここでポインタを使用することになっていますか?

4

4 に答える 4

6
class Bar {
public:
    Bar():f(0) { }
    explicit Bar(int n):f(n) { }
    private: Foo f;
};

c-torsを使用して独自の書き込みを行うか、パラメータを使用せずに書き込みinitializer-listを行うか、を使用して、またはを記述できます。c-torFoopointerC++11

class Bar {
public:
    private: Foo f = Foo(1);
};
于 2012-08-13T08:57:40.953 に答える
4

これは2つの異なる方法で処理できます。

(1)適切な引数コンストラクターを提供するclass Foo

引数なしのコンストラクターを導入するか、Foo()デフォルトの引数を受け入れる現在のコンストラクターを編集できます。Foo(int n = 0)

(2)適切なarugmentを使用してclass Foo内部のコンストラクターを呼び出すBar

例えば

class Bar {
...
  Bar() : f(0) {}  // (a) pass the argument explicitly 
  Bar(int n) : f(n) {} // (b) receive argument inside Bar()
};
于 2012-08-13T09:00:25.287 に答える
0

あなたのFooが構築するために引数を必要とする場合、2つの可能性があります:
-あなたのバーは彼自身のFooを構築するために静的な番号を使用します(すべてのバーはFooで同じnを持ちます)
-あなたのバーはそれらの中で異なる番号を持ちますメンバーFoo。次に、次のようにBarコンストラクターに数値を渡すことができます。

class Bar {
    Bar(int n) : Foo(n) { ... } ;
    }
于 2012-08-13T09:23:28.550 に答える
0

Fooのデフォルトのコンストラクターを使用するか、クラスBarでFooのポインターを使用して、後でオブジェクトを設定することができます。

于 2012-08-13T08:57:17.257 に答える