次のスニペットを検討してください。
class Pin
{
public:
Pin()
{
}
};
class Connection
{
Pin& _from;
Pin& _to;
public:
Connection(Pin& from, Pin& to)
: _from(from), _to(to)
{
}
};
class Device
{
Pin _a, _b;
Connection _int_conn;
public:
Device()
: _int_conn(_a, _b)
{
}
};
次に、相互にコピーできるoperator=
ように定義したいと思います。Device
int main()
{
Device a, b;
a = b;
}
もちろん、クラスは 2 つの参照を保持しているoperator=
ため、デフォルトでは十分ではありません。Connection
ただし、この特定の操作では、Device
他のすべてのプロパティをコピーし、参照をそのままにしておくことが望ましいです (参照は常に「親」ピンを指すことが期待されるため)。
一方、Connection
クラスはユーザーも使用でき、2 つのピンは他のクラスに属することができます。この場合、他のプロパティをコピーすることは有益かもしれませんが、それを使用するのは少し間違っているようoperator=
です。言い換えると:
int main()
{
Pin a, b, c, d;
Connection y(a, b), z(c, d);
y = z;
}
非参照メンバーをコピーすることは私には間違っているようです。
operator=
さらに、ポインターへの参照を変更することにした場合は、おそらくそれらもコピーしたいと思うでしょう。
私はここにいますか?最善の行動方針は何ですか?次のような追加のメソッドを定義することを考えています。
void Connection::copy_properties(Connection& rhs)
または単にそれらを にコピーしますDevice::operator=
。