まず、私はこれらのような質問については言いません(1、2)。私は既にコンストラクタを持っているクラスについて話していますが、それが意味をなさないならば、定義によってではなく、値によって入れ子になっています。入れ子クラスのコンストラクタを呼び出す方法
現在、私が働くこの方法を、持っているが、new
を使用し、IMO醜いです:Bのコンストラクタを
class A {
private:
int value;
public:
A(int _value);
};
class B {
private:
A *a;
public:
B(int _value);
};
:
B::B(int _value)
{
a = new A(_value);
}
私はA a
にA *a;
を変更した場合、 A
のコンストラクタが同じ方法で呼び出されるように、B
を作成するにはどうすればよいですか?
私が試してみた:A
ためのいくつかの明示的なvoid A::init(_value)
(必要になり、追加のコンストラクタを使用してnew
- :それはなしで可能ていないよう
B::B(int _value) { a = A(_value); // no matching function for call to ‘A::A()’ a = A::A(_value); // cannot call constructor ‘A::A’ directly a(_value); // no match for call to ‘(A) (int&)’ a.A(_value); // invalid use of `A::A` }
引数を取らないようにする)
- クラスAを拡張する(特定のprivateメンバーをprotectedとw )不要なやり方で
memcpy()
(A temp(_value); memcpy(&a, &temp, sizeof (A));
)
の
参照メンバとコンストラクタ初期化子リストを使用します。 –
この場合、参照が値に対して持つ利点はありますか?両方とも 'B 'の作成時に作成されるようで、両方とも同じ使用構文と意味を持ちます。 –
いいえ、おそらくちょうどあなたの質問が間違っています。 –