为什么operator<<>>运算符重载一定要为友元函数呢?
来源:互联网 发布:域名邮箱和企业邮箱 编辑:程序博客网 时间:2024/06/06 05:10
如果是重载双目操作符(即为类的成员函数),就只要设置一个参数作为右侧运算量,而左侧运算量就是对象本身。。。。。。
而 >> 或<< 左侧运算量是 cin或cout 而不是对象本身,所以不满足后面一点。。。。。。。。就只能申明为友元函数了。。。
如果一定要声明为成员函数,只能成为如下的形式:
ostream & operator<<(ostream &output)
{
return output;
}
所以在运用这个<<运算符时就变为这种形式了:data<<cout;
不合符人的习惯。
运算符重载函数可以作为成员函数,友元函数,普通函数。
普通函数:一般不用,通过类的公共接口间接访问私有成员。
成员函数:可通过this指针访问本类的成员,可以少写一个参数,但是表达式左边的第一个参数必须是类对象,通过该类对象来调用成员函数。
友元函数:左边一般不是对象。<< >>运算符一般都要申明为友元重载函数。
一般情况下:
将双目运算符重载为友元函数,这样就可以使用交换律,比较方便
单目运算符一般重载为成员函数,因为直接对类对象本身进行操作
总之:如果运算符重载为成员函数,第一个参数必须是本类的对象,因为默认使用第一个参数的对象进行调用该成员函数。
#include<iostream>
using namespace std;
class Point
{
float x;
float y;
public:
Point(float a,float b):x(a),y(b)
{
}
float getx()
{
return x;
}
float gety()
{
return y;
}
Point operator+(Point p1);
friend ostream &operator<<(ostream &out,Point &p);
};
Point Point::operator+(Point p1)
{
Point p2(x+p1.getx(),y+p1.gety());
return p2;
}
ostream &operator<<(ostream &out,Point &p)
{
out <<p.x<<","<<p.y;
return out;
}
int main()
{
Point p1(1,1);
Point p2(2,2);
Point p3=p1+p2;
cout << p3<<endl;
return 0;
}
- 为什么operator<<>>运算符重载一定要为友元函数呢?
- 为什么operator<<>>运算符重载一定要为友元函数呢?
- 为什么operator<<>>运算符重载一定要为友元函数呢?
- 为什么operator << 运算符重载,需要定义为friend函数呢?
- 运算符重载为友元函数
- C++重载运算符及<<输出运算符为什么要声明为友元函数
- 流运算符为什么不能重载为成员函数,只能用友元函数重载
- 流运算符为什么不能重载为成员函数,只能用友元函数重载
- 运算符重载为友元函数举例
- 多态性:运算符重载为类的友元函数
- 初探C++运算符重载学习笔记<2> 重载为友元函数
- 运算符重载与友元函数
- c++ 运算符重载 友元函数
- 利用友元函数,重载运算符
- 友元函数重载运算符
- 重载运算符以及友元函数
- 7.10友元函数重载运算符
- 运算符重载和友元函数
- ViewPager初识(二)
- 嵌入式Linux下各种文件系统名词解析
- redis 简单使用总结
- maven(一)
- java书单
- 为什么operator<<>>运算符重载一定要为友元函数呢?
- 欢迎使用CSDN-markdown编辑器
- Redis+MongoDB+Memcached
- GIT服务器的搭建|菜鸟实践(实验室)
- linux
- Python:使用Kivy将python程序打包为apk文件
- 非洲小孩
- hpuoj 【1065】 军训排队【sort】
- Java实现的麻将胡牌算法