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 ...
随机推荐
- 《高性能MySQL》 读书总结
目录: 第一章.MySQL架构与历史 第二章.MySQL基准测试 第三章.服务器性能剖析 第四章.Schema与数据类型优化 第五章.创建高性能的索引 第六章.查询性能优化 第七章.MySQL高级特性 ...
- Oracle-RAC原理
Oracle-RAC原理 来源 https://blog.csdn.net/qq_34556414/article/details/79001267 单点数据库 VS RAC 单节点数据库,如果实例宕 ...
- 容器化RDS|计算存储分离 or 本地存储?
随着交流机会的增多(集中在金融行业,规模都在各自领域数一数二),发现大家对 Docker + Kubernetes 的接受程度超乎想象, 并极有兴趣将这套架构应用到 RDS 领域.数据库服务的需求可以 ...
- BZOJ1502:[NOI2005]月下柠檬树——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=1502 https://www.luogu.org/problemnew/show/P4207 李哲 ...
- HDOJ(HDU).1059 Dividing(DP 多重背包+二进制优化)
HDOJ(HDU).1059 Dividing(DP 多重背包+二进制优化) 题意分析 给出一系列的石头的数量,然后问石头能否被平分成为价值相等的2份.首先可以确定的是如果石头的价值总和为奇数的话,那 ...
- vim 打开中文乱码
[root@yu ~]# find / -name vimrc/etc/vimrc [root@yu ~]# vim /etc/vimrc set fileencodings=utf-8,gb2312 ...
- H5背景音乐自动播放(兼容微信IOS,进程后台切换自动停止播放,本文例子为Vue写法)
<template> <audio src="./static/music.mp3" id="bgMusic" preload="a ...
- Hive架构及应用介绍【链接】
原文链接:https://blog.csdn.net/a2011480169/article/details/51482799
- ACE线程管理机制-并发控制(2)
转载于:http://www.cnblogs.com/TianFang/archive/2006/12/04/581793.html ACE Guard类属 与C一级的互斥体API相比较,Mutex包 ...
- PowerDesigner逆向生成
人越长大话越少,我们不再说今天受了委屈,不再说谁谁谁不理我了我好难过,不再分享生活中的琐事. 我知道人和人之间没法互相理解,大家都很忙,针也没扎在别人身上. 所以把那些还没说出口的话消化在每一步走过的 ...