左移运算符重载:


直接输出p是不行的,我们需要重载<<

注意,一般不会通过成员函数来重载左移运算符,因为那个样子cout就在<<的左侧了。

所以我们使用全局函数重载<<;

在前面文章我们提到过一个链式编程,cout就是链式编程:

重载运算符,那么我们就要传入参数,这个位置应该传入什么参数?显然,cout<<p,我们左边应该传入cout,右边应该传入p。

p的类型可以知道是person,那么cout的类型又是什么呢?我们可以转到定义看一下:

cout的类型是ostream,输出流的意思;

我们不知道返回值是什么,那么我们就可以先这样写:
这里有个问题需要注意一下,cout必须传入ostream &cout,不能传值,因为cout只能有一份

void operator<<(ostream &cout,person p)
{cout<<"p.m_a="<<p.m_a<<"p.m_b="<<p.m_b;
}

我们来试一试:

完全没有问题,那么我们再来试一试在p后面加个<<endl:

报错了,为什么,因为我么这里的cout<<p并没有返回值!我们重载的时候数据类型写的是void:

所以我们知道了我们应该返回ostream类型。

那么我们又来看看代码:

为什么还有问题?

我们再看看正确的情况:

可以看到这两幅图的区别就是多了一个&符号在返回值那个位置,如果没有这个引用符号,我们返回的将会是一份cout的拷贝,但是我们知道了cout在输出流当中,只能有一份,所以我们必须返回ostream&类型。

ostream  & operator<<(ostream& out, person p)
{out << "p.m_a=" << p.m_a << "p.m_b=" << p.m_b;return out;
}

注意点:
1.上面这个样子也是没有问题的,因为引用简单来说就是取别名。
2.如果m_a是私有属性,那么我们用到友元便可以解决

4.2左移运算符重载相关推荐

  1. 运算符重载——左移运算符重载

    目录: 运算符重载--算术运算符重载 运算符重载--递增运算符重载 运算符重载--左移运算符重载 运算符重载--赋值运算符重载 应用场景: 可以输出自定义的数据类型信息 Person p(" ...

  2. 左移运算符重载(C++)

    左移运算符重载 视频链接 作用:可以输出自定义数据类型 我们正常情况下无法输出自定义数据类型.这个时候就需要重载<<运算符 注意,通常不会用成员函数重载<<运算符,因为无法实现 ...

  3. C++左移运算符重载

    C++左移运算符重载 通过重载使得左移运算符可以输出自定义数据类型. 在类中定义成员函数实现不了左移运算符重载. 要在全局函数中实现左移运算符重载. 注:左移运算符的类型是ostream 过程如下: ...

  4. C++类与对象笔记十二:运算符重载二:左移运算符重载

    左移运算符重载:可以打印输出自定义数据类型. 为了输出重载,我们先看看现有的输出函数.输出类型为std下的ostream类型的引用. 标准输出流(全局只能有一个). 返回值类型为ostream,函数名 ...

  5. 【C++】有关<左移运算符重载>的总结

    大家好,我是翼同学! 目录 1️⃣前言 2️⃣左移运算符重载 4️⃣需注意的点 5️⃣写在最后 1️⃣前言 今天的笔记内容是: 左移运算符的重载 在类中,我们可以编写类的各种属性. 而左移运算符的重载 ...

  6. 运算符重载之左移运算符重载

    左移运算符重载 #include<iostream> using namespace std; class wood {friend ostream& operator<&l ...

  7. C++_类和对象_C++运算符重载_左移运算符重载_链式编程_实现直接打印对象---C++语言工作笔记056

    然后我们再去看左移运算符,实际上就是那个<< 小于号 为什么要重载他呢?因为我们想实现一个功能,比如我仅仅是cout << p 就可以打印这个对象,现在肯定是不行对吧. 我们用 ...

  8. C++学习之左移运算符重载

    在C++里,cout 后边加上<< 便可以输出数据,但是输出的只是一些变量,我现在想输出一个对象,所以需要重载一下<<. 例如我创建了一个class person{ }; pe ...

  9. c++中运算符重载(加号运算,左移运算,前置后置++运算符,赋值运算,关系运算,函数运算)

    运算符重载注意 重载的运算符要易读 内置的数据类型的表达式的运算符是不可以改变的 不要重载&& 和 | | 运算符 =,[]和->运算符只能通过成员函数进行重载 << ...

最新文章

  1. php mysql预处理_PHP MySQL 预处理语句
  2. 在线作图丨数据降维方法③——正交偏最小二乘方判别分析(OPLS-DA)
  3. Jconsole远程监控Tomcat
  4. 面试必会系列 - 1.6 Java 垃圾回收机制
  5. ios 跨域_如何在iOS和Android中建立跨域通信桥
  6. 手机网站注册页面html模板,手机网页登录注册自适应模版
  7. bearer token头_bearer token 是什么意思
  8. 计算机组成原理/计算机硬件基础第五章:存储器
  9. 前期总结+开学展望(WYL)
  10. C语言学习路线,思维脑图,学单片机的一定要知道
  11. 2014 android 新技术,向友商学习 Android 12新功能前瞻:似曾相识
  12. TX2超详细,超实用刷机教程(亲测有效,所有步骤都是博主亲自实践过)
  13. intellij IDEA 设置格式化代码后多行空行转为一行
  14. php 链接oracle tns,PHP连接Oracle ORA
  15. 【C++】win 10:VC 6.0 中文版下载、安装、使用
  16. moment获取时间
  17. gnuradio的安装以及安装常见错误
  18. 如何制作PechaKucha的PPT?
  19. 《开源思索集》一欢迎来到异步社区!
  20. 【动态规划】最长子序列模型:导弹拦截

热门文章

  1. 主成分分析(PCA)特征选择算法详解
  2. Win32Exception (0x80004005): 找不到指定的模块
  3. Linux系统用户与用户组管理
  4. 如何解除 VMWare Player 的 side channel mitigations 提示
  5. IBM-JDK与Sun-JDK加密算法提供者差异
  6. 神经网络名词缩写及中英文对照
  7. OLT、ONU、ODN
  8. 光分配网(ODN)中光缆的组网结构
  9. matlab求cusum,关于CUSUM ARL计算的问题
  10. Spring Security Oauth2 token 续期