0
friend istream& operator>>(istream &is, Complex &c) {
    int re;
    int im;

    is >> re >> im;
    c.setReal(re);
    c.setImaginary(im);

    return is;
}   

有什么办法可以做到这一点是一两行?也许像,

is >> setReal() >> setImaginary();

这些函数虽然需要一个 int,但我不知道我将如何编码。

4

1 回答 1

2

鉴于您的函数是 a friend,它可以访问所有类的数据成员。我假设您对每个实部和虚部都有一个数据成员,因此您可以更改代码以避免设置函数:

friend istream& operator>>(istream &is, Complex &c)
{
    return is >> c.re_ >> c.im_;  // or whatever you've called the data members...
}

作为一般准则,最好通过公共接口,即使是冗长的,因为这意味着您不必仅仅因为您更改了一些私有实现细节(例如重命名这些成员变量或将您的类更改为是一个库的复杂类的包装器),但如果你在这里更看重简洁,那么这就是你的选择。

顺便说一句/-Kerrek 的评论是正确的:您的代码没有正确失败。如果实数或虚数转换失败,您可能需要考虑要让 Complex 对象和流处于什么状态......

于 2013-02-19T02:17:42.273 回答