2016-07-19 2 views
-4

Там есть этот код:Перегрузка операторов, нужно объяснение

class precision { 
     int digits; 
     public: precision(int digits) : digits(digits) {} 
     friend ostream& operator<<(ostream& os, const precision& p) { 
      os.precision(p.digits); 
      return os; 
     } 
    }; 

Это означало, чтобы сделать командную строку:

cout << precision(5) << a << " " << precision(2) << b << endl; 

работать, а не делать:

cout.precision(5); 
cout << a << " "; 
cout.precision(2); 
cout << b << endl 

Я не понимаю, как работает функция функции друга. Почему это друг? И почему он получает два аргумента вместо одного? Благодарю.

ответ

0

Это друг, с тем чтобы он мог получить личное значение digits.

Два аргумента взяты из компилятора, соответствующего cout << precision(5), на звонок operator<<(cout, precision(5)). Затем оператор возвращает подтверждение для потока, которое используется для следующей части stream << a и т. Д.