为什么operator << 运算符重载,需要定义为friend函数呢?
来源:互联网 发布:石应康为何自杀 知乎 编辑:程序博客网 时间:2024/05/17 02:18
《C++ Primer》中这样说的:
与iostream标准库兼容的输入,输出运算符必须是普通的 非成员函数,而不能为类的成员函数,否侧他们的左侧对象将是我们的类的一个对象。
data << cout; //如果operator <<是类的成员函数。
我读了好几遍才理解的,这样理解就行了,<<是 双目运算符,如果是类的成员函数那么<<的左侧应该是类本身,例如operator=
/* 重载=输出运算符 */MyString& operator=(const MyString& s){delete []m_data;m_data = new char[strlen(s.m_data) + 1];memcpy(m_data,s.m_data,strlen(s.m_data) + 1);return *this;}使用的时候就这样用的,左侧是str2,是类的对象。
MyString str1("hello");MyString str2("ss");str2 = str1;
而operator<<使用的时候,是cout << str1;这样用的.左侧是cout,而不是类的对象,所以operator<<不能是类的成员函数,需要定义为友元函数。
/* 重载<<运算符 */friend ostream& operator << (ostream& output, const MyString &s){cout << s.m_data;return output;}
1 0
- 为什么operator << 运算符重载,需要定义为friend函数呢?
- 为什么operator<<>>运算符重载一定要为友元函数呢?
- 为什么operator<<>>运算符重载一定要为友元函数呢?
- 为什么operator<<>>运算符重载一定要为友元函数呢?
- c++ operator定义为friend function
- C++ -- operator定义为friend function
- operator重载运算符
- operator 运算符重载
- operator运算符重载
- operator重载运算符
- 运算符重载 const friend
- 运算符重载:友元(friend)函数问题
- 运算符重载:友元(friend)函数问题
- 流运算符为什么不能重载为成员函数,只能用友元函数重载
- 流运算符为什么不能重载为成员函数,只能用友元函数重载
- C++的class的operator定义为friend function讨论
- 运算符重载(重载为普通函数)
- 运算符重载(重载为成员函数)
- Redis 存储List对象
- 挺好的文章收藏了
- 数据表中列数据转换成字符串
- Linux 联网 安装 MySQL
- win10 文件系统错误-2147416359
- 为什么operator << 运算符重载,需要定义为friend函数呢?
- django 1.8 官方文档翻译:7-2 管理操作
- 老拙穿破袄
- webrtc视频采集后编码与发送
- Java中使用Jedis操作Redis
- java 计算经度纬度之间的距离
- Apache ab压测指令
- libnet入门,libpcap,libnids,libicmp~~网络开发~~~
- XcodeGhost:墙、感染、信任和欺骗