运算符重载,需要解释

时间:2016-07-19 12:49:08

标签: c++ operator-overloading

有这段代码:

 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

我无法理解朋友功能部分的工作原理。为什么这是朋友?为什么它会收到两个参数而不是一个?感谢。

1 个答案:

答案 0 :(得分:0)

这是朋友,因此可以访问私人值digits

这两个参数来自编译器将cout << precision(5)与调用operator<<(cout, precision(5))匹配。然后,运算符返回流的refence,用于下一部分stream << a等。