<<运算符的重载

C 在输出内容时,最常用的方式:

std::cout << 1 <<"hello";

提出问题:

  • 那这条语句为什么能成立呢?

  • cout 是什么?为什么 << 运算符能用在 cout 上呢?

原因:

  • 实际上,cout 是在 iostream 头文件中定义的 ostream 类的对象。

  • << 能够用在 cout 上是因为,在 ostream 类对 << 进行了重载。

对于如下这条语句:

std::cout << 1 <<"hello";

有可能按以下的方式重载成 ostream 类的成员函数:

ostream & ostream::operator<<(int n){    .... // 输出n整型的代码    return *this;}
ostream & ostream::operator<<(const char * s){    .... // 输出s字符串的代码    return *this;}

那么在使用流插入<<运算符时,等价于的形式如下:

01 数据类型是int类型时:

std::cout << 1;

上面的语句,等价于:

cout.operator<<(1);

02 数据类型是字符串类型时:

std::cout << "hello";

上面的语句,等价于:

cout.operator<<("hello");

03 数据类型组合使用时:

std::cout << 1 <<"hello";

上面的语句,等价于:

( cout.operator<<(1) ).operator<<("hello");

— —

假定我们要想把某个对象里的内容进行打印输出,那么我们可以重载 ostream 类的流插入 << 运算符。

下面以 CStudent 类作为例子:

输出结果:

1,20,小林coding

需要注意:

ostream & operator<<(ostream & o, const CStudent & s)

函数是全局的,所以函数的第一个参数必须要传入 ostream 的对象,并且 CStudent 类需要将此函数声明成友元函数,使得函数可以访问 CStudent 类的私有成员变量。

>>运算符的重载

还是以 CStudent 类作为例子,假设想通过键盘的输入的内容,来初始化对象,则我们可以重载 istream 类的流提取 >> 运算符。

输入内容和输出内容:

// 输入内容:1,20,小林coding
// 输出内容:1,20,小林coding

小结

要想流插入 << 运算符和流提取 >> 运算符能针对自定义的对象,那么我们就需要重载针对该对象的 ostream 类的 << 运算符和 istream 的 >> 运算符,并且只能重载成全局的函数

然后在 CStudent 类里需要把上面的两个重载函数声明成友元函数,使得两个重载的函数可以访问和赋值 CStudent 类里的私有成员函数。

声明:

本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。

C 流插入和流提取运算符的重载相关推荐

  1. C++对输入流输出流运算符的重载【案例】

    重载流插入 << 和流提取 >> 运算符,使其能够直接输出复数的类型的数据: #include <iostream> using namespace std; cl ...

  2. 【C++入门】C++ 运算符的重载

    C++运算符的重载 文章目录 C++运算符的重载 一.运算符重载基本概念 二.赋值运算符的重载 三.运算符重载为友元函数 四.流插入运算符和流提取运算符的重载 五.类型转换运算符和自增.自减运算符的重 ...

  3. C++重载流插入运算符与流提取运算符

    C++重载流插入运算符与流提取运算符 1.1 "<<" 流插入运算符,">>"流提取运算符. 1.2对"<<&qu ...

  4. C++学习笔记(11) 重载流插入运算符和流提取运算符,以及自动类型转换

    1. 重载<< 和>>运算符 <<和<<运算符可以被重载用于输入输出操作,在上一节中,我们对Rational对象进行输出时定义了toString()类成 ...

  5. H264码流插入自定义数据(SEI字段)

    文章目录 前言 一.H264码流结构 1. 文字说明 2. 码流格式图解 二.自定义数据封装以及H264码流插入 1.将自定义数据封装成SEI字段通用格式即可插入H264码流中 2.编程逻辑 三.附上 ...

  6. java文件流插入数据库_使用Java流查询数据库

    java文件流插入数据库 在本文中,您将学习如何编写纯Java应用程序,这些应用程序能够处理现有数据库中的数据,而无需编写一行SQL(或类似的语言,例如HQL),而无需花费数小时将所有内容放在一起. ...

  7. web简易视频聊天室+媒体流插入

    语音聊天室是最近非常热门的一款语音类软件,但是编写一个语音聊天室软件是不是很困难呢?没关系,今天为大家带来简易版的,非常简单呦!但是光聊天怎么行,想不想一起在聊天室看视频,一起吐槽.观看呢!不要急哟, ...

  8. 使用Stream流的map()方法,将每个元素封装为一个Person对象。 *  将新流中的元素提取为List集合。

    一 编程题[Stream流]* 1.4 题目(有难度)* 1.定义一个Person类,包含一个属性:姓名(String)* 定义无参.全参构造方法* 定义get/set方法* 2.定义main()方法 ...

  9. 流 java_java8——使用流

    概要 流让你从外部迭代转向内部迭代.这样,你就用不着写下面这样的代码来显式地管理数据集合的迭代(外部迭代)了: List vegetarianDishes = new Arraylist<> ...

最新文章

  1. VINS-Mono:一种鲁棒且通用的单目视觉惯性系统
  2. 李开复:明年会有一批AI公司倒闭
  3. 在cmd环境下操作Oracle11g数据库
  4. JVM - 实现自定义的ClassLoader就是这么简单
  5. DIV+CSS布局的优势和弊端
  6. E. Mocha and Stars(莫比乌斯反演、简单dp)
  7. PhpMyAdmin后台getshell
  8. iRobot 的 30 年成长史
  9. android gps导航省电,具有省电功能的gps导航系统及其省电方法
  10. 桂电管理科学可以转计算机,去年调到桂电计算机的感言,希望对各研友有帮助...
  11. 50多款51单片机程序源码原理图编程源代码
  12. php图片64位处理,php实现图片以base64显示的方法
  13. 昆明市计算机专业职称评定,云南省专业技术人员评聘专业技术职务实施计算机职称考试的通知...
  14. IP地址的定义及分类
  15. 第10章项目干系人管理__权力利益分配
  16. css的after右箭头,偷师成功,纯CSS绘制右箭头及其他——灵动外卖开发笔记
  17. 心의 體는 仁禮義知 (韓長庚 易學原理總論)
  18. 文件误删秒恢复!微软又发布了一款命令行神器!
  19. python IO编程
  20. mysql索引用trie树_数据结构与算法之美【完整版】

热门文章

  1. 看到一个沙粒世界:再一次你好世界
  2. 通过引入switch表达式来增强Java switch语句
  3. tomcat 轮询_用Spring长轮询Tomcat
  4. Java命令行界面(第19部分):jClap
  5. javabeans_膨胀的JavaBeans –不要在您的API中添加“ Getters”
  6. AWS:启动安装了APOC的Neo4j实例
  7. cometd_CometD:Java Web应用程序的Facebook类似聊天
  8. mvvm 后端_ZK实际应用:MVVM –与ZK客户端API一起使用
  9. Spring @Configuration – RabbitMQ连接
  10. Thymeleaf与Spring集成(第2部分)