Итак, у меня есть следующий класс:
typedef double decimal;
class Ratio {
int num, den;
decimal val;
public:
Ratio() { num = 1, den = 1, val = (decimal)num / den; }
Ratio update(int a, int b) {
num *= a, den *= b;
val = (decimal)num / den;
return *this;
}
decimal v(void) { return val; }
friend ostream &operator<<(ostream &out, const Ratio &R) {
return (out << R.num << ':' << R.den);
}
};
Когда я использую функции-члены в выходном потоке как:
cout<<"R = "<<R.update(2,1)<<"\tvalue = "<<R.v();
, где R имеет тип Ratio, функция в правом конце вызывается первым, поэтому отображается обновленное соотношение, но не обновленное значение:
R = 2:1 value = 1
Я преодолел это, разделив поток на две части:
cout<<"R = "<<R.update(2,1), cout<<"\tvalue = "<<R.v();
, чтобы Я "заставляю" .update () быть вызванным первым. Есть ли другой способ добиться этого, используя только один поток для вывода?