在学习运算符"<<"以及">>"重载的时候在自定义的Myclass里面看到这样一条header
friend ostream &operator<<(ostream &out, Myclass &classname);
对为什么唯独"<<"和">>"的运算符重载需要加上这个friend感到非常疑惑
最后经过搜索引擎的帮助以及自己写了个验证程序确定 终于搞懂了
对于没有加上friend的运算符重载 运算符的左边必须是class的instance
也就是说 对于这样两个Myclass类的实例A, B
A = B + 1;
这条语句会用1来初始化一个Myclass的对象 然后根据重载函数operator+执行与B的相加操作
因此这条语句等价于 A = B.operator+(1);
回到一开始产生疑惑的地方
Myclass A;
cout << A;
<<运算符的左边实际上是cout, 也就是ostream类.
为了实现上述代码的效果
需要加上friend让Myclass内部的私有变量可以被读取输出