C++ 流操作符重载函数
1. 问题
在C++中,在进行输入输出操作时,我们首先会想到用cout, cin这两个库操作语句来实现,比如
cout << 8 << "hello world!" << endl;
cin >> s;
cout,cin分别是库ostream, istream里的类对象
如果想要cout,cin来输出或输入一个类对象,这样的需求它能满足吗?很显然,原来的cout不太可能满足直接输入输出一个我们自定义的类对象,
但是只要我们对<<, >>操作符进行重载就可以让它处理自定义的类对象了。
2. 实现
有一复数类:
class Complex {
priate:
int real;
int imag;
public:
Complex(int r=, int i=):real(r),imag(i) {
cout << real << " + " << imag << "i" ;
cout << "complex class constructed."
}
}
int main() {
Complex c; // output : 0+0i, complex class constructed.
cout << c ; // error
return 0;
}
之所以上面main函数中 cout << c会出错,是因为 cout本身不支持类对象的处理,如果要让它同样能打印类对象,必须得重载操作符<<.
#include <iostream>
#include <string> class Complex {
priate:
int real;
int imag;
public:
Complex(int r=, int i=):real(r),imag(i) {
cout << real << " + " << imag << "i" ;
cout << "complex class constructed."
}
// overload global function
friend ostream & operator<<(ostream & o, const Complex & c);
friend istream & operator >> (istream & i, Complex & c);
} ostream & operator<<(ostream & o, const Complex & c) {
o<< c.real << "+" << c.imag << "i";
return o;
} istream & operator >> (istream & i, Complex & c){
string s;
i >> s; // simillar to cin >> s; input string format like as a+bi
... // parse s and get the real and imag
c. real = real;
c.imag = imag;
return i;
}
重载了操作符 <<, >> 运算后, 就可以对类Complex直接进行 输入输出操作了,比如
int main{
Complex c, c1;
cin >> c; //input : 3+4i
cout << c <<";" << c1 << " complex output."; // output : 3+4i; 0+0i complex output.
}
C++ 流操作符重载函数的更多相关文章
- c++ 操作符重载和友元
操作符重载(operator overloading)是C++中的一种多态,C++允许用户自定义函数名称相同但参数列表不同的函数,这被称为函数重载或函数多态.操作符重载函数的格式一般为: operat ...
- C++基础学习笔记----第十三课(操作符重载-下)
本节主要讲使用成员函数重载操作符,包括[],=,(),->四种操作符的重载以及&&和||的问题. 类的成员函数进行操作符重载 基本概念 类的成员函数也可以进行操作符的重载.类的普 ...
- C++中的操作符重载
一.什么是操作符重载 操作符重载可以分为两部分:“操作符”和“重载”.说到重载想必都不陌生了吧,这是一种编译时多态,重载实际上可以分为函数重载和操作符重载.运算符重载和函数重载的不同之处在于操作符重载 ...
- 15.C++-操作符重载
首先回忆下以前学的函数重载 函数重载 函数重载的本质为相互独立的不同函数 通过函数名和函数参数来确定函数调用 无法直接通过函数名得到重载函数的入口地址 函数重载必然发生在同一个作用域中 类中的函数重载 ...
- 5.7 C++函数调用操作符重载
参考:http://www.weixueyuan.net/view/6385.html 总结: 需要以类成员函数的形式对函数调用操作符“()”进行重载. 只有常成员函数才能处理常对象,故我们依然在类中 ...
- 5.1 C++基本操作符重载
参考:http://www.weixueyuan.net/view/6379.html 总结: 操作符重载指的是将C++提供的操作符进行重新定义,使之满足我们所需要的一些功能. 长度运算符“sizeo ...
- 15.C++-操作符重载、并实现复数类
首先回忆下以前学的函数重载 函数重载 函数重载的本质为相互独立的不同函数 通过函数名和函数参数来确定函数调用 无法直接通过函数名得到重载函数的入口地址 函数重载必然发生在同一个作用域中 类中的函数重载 ...
- C++解析(17):操作符重载
0.目录 1.操作符重载 2.完善的复数类 3.小结 1.操作符重载 下面的复数解决方案是否可行? 示例1--原有的解决方案: #include <stdio.h> class Compl ...
- C++ 操作符重载 (operator)
重载不能改变操作符的优先级 如果一个内建操作符是一元的,那么所有对它的重载仍是一元的.如果是二元的重载后也是二元的 下面看一个有代表性的例子:: 头文件Complex.h: #includeusing ...
随机推荐
- JS变量对象详解
JS变量对象详解 开年之后工作热情一直不是很高,这几天一直处于消极怠工状态.早上不想起床,起床了不想上班.明明放假之前工作热情还一直很高,一直心心念念的想把小程序项目怼出来,结果休假回来之后画风完全不 ...
- [Leetcode] single number 找单个数
Given an array of integers, every element appears twice except for one. Find that single one. Note: ...
- UVA.136 Ugly Numbers (优先队列)
UVA.136 Ugly Numbers (优先队列) 题意分析 如果一个数字是2,3,5的倍数,那么他就叫做丑数,规定1也是丑数,现在求解第1500个丑数是多少. 既然某数字2,3,5倍均是丑数,且 ...
- App.config的典型应用
----.net中XML的典型应用 第一种修改方式: 添加xml节点figguration内容, 微软提供了一种方案来读取connectionStrings里的内容 这样就可以拿到连接sql serv ...
- 淘淘相关DTO
result 用于Controller层返回值或Controller于service层之间返回值 package com.taotao.common.pojo; import java.util.Li ...
- HDU3336 KMP+DP
Count the string Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- HDU1832 二维线段树求最值(模板)
Luck and Love Time Limit: 10000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- Qt ---------- connect连接类型
Qt::AutoConnection 0 (Default) If the receiver lives in the thread that emits the signal, Qt::Direct ...
- robots.txt使用和优化技巧
一.利于网站优化的robots.txt使用技巧 1.在线建站提供方便之路.当我们将域名解析到服务器,可以访问站点了,可是这个时候站点还没有布局好,meta标签还一塌糊涂.乳沟此时的站点被 搜索引擎蜘蛛 ...
- YAML schema reference
YAML schema reference 10/30/2018 14 minutes to read Azure Pipelines Here's a detailed reference guid ...