1

私の質問は次のとおりです。

class Foo
{
public:
    Foo() {}
    void setInt(int i) { myInt = i; }
    int getInt() { return myInt; }
private:
    int myInt;
};

class Bar
{
public:
    Bar(Foo f) { /* do something with f.getInt() */ }
};

これで、Bar を vairable メンバーとして持つ別のクラスができました。

class BarUser
{
public:
    BarUser();
private:
    Bar bar;
};

BarUser のコンストラクターを作成したいのですが、整数として 3 を持つ Foo メンバーで Bar を初期化したいと考えています。すなわち:

Foo f;
f.setInt(3);
Bar b(f);

ただし、クラスメンバーとして Bar があるため、このコードをすべて初期化リストに書き込むことはできません... つまり、次のとおりです。

BarUser::BarUser() : bar(/* Foo after executing f.setInt(3) */)
{ ... }

代入演算子が Bar に許可されていないとします - 意図したとおりに初期化するにはどうすればよいですか?

ありがとう!

4

1 に答える 1

0

を変更できない場合はFoo、関数を記述します。

Foo make_foo(int i) { 
     Foo f; 
     f.setInt(i); 
     return f;
}

で初期化しbar(make_foo(3))ます。

Fooコンストラクターを指定してコンストラクターを指定しないことで、自分自身を撃ったようなものですintexplicitを受け取るコンストラクターを追加する方がよい場合がFooありintます。

于 2012-10-15T11:42:46.447 に答える