请考虑以下代码段:
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;
}
当然,默认值operator=
是不够的,因为Connection
该类包含两个引用。然而,对于这个特定的操作,希望Device
复制所有其他属性并保持引用完好无损(因为它们应该始终指向“父”引脚)。
另一方面,Connection
该类也可以被用户使用,那么这两个引脚可以属于任何其他类。在这种情况下,虽然复制其他属性可能是有益的,但使用它似乎有点不正确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=
.