我可以缩短这个istream函数吗?

时间:2013-02-19 01:33:50

标签: c++ istream

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,但我不知道如何编写代码。

1 个答案:

答案 0 :(得分:2)

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

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

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

BTW / - Kerrek的评论是正确的:您的代码没有正确失败。如果真实或虚构的转换失败,您可能想要考虑要将Complex对象和流保留的状态....