运算符重载-流插入运算符和流提取运算符的重载
来源:互联网 发布:淘宝在哪里搜店铺? 编辑:程序博客网 时间:2024/04/30 03:26
本章内容均为coursera中C++程序设计课件的整理
流插入运算符和流提取运算符的重载
问题
cout << 5 << “this”;为什么能够成立?cout是什么?“ <<” 为什么能用在 cout上?
cout 是在 iostream 中定义的ostream 类的对象。
“ <<” 能用在cout 上是因为在iostream里对 “ <<” 进行了重载。
怎么重载才能使得cout << 5; 和 cout << “this” 都能成立?
有可能按以下方式重载成 ostream类的成员函数:
void ostream::operator<<(int n){…… //输出n的代码return;}cout << 5 ; 即 cout.operator<<(5);
cout << “this”; 即 cout.operator<<( “this” );
怎么重载才能使得cout << 5 << “this” ;成立?
ostream & ostream::operator<<(int n){…… //输出n的代码return * this;}ostream & ostream::operator<<( const char * s ){…… //输出s的代码return * this;}cout << 5 << “this”;本质上的函数调用的形式是什么?
cout.operator<<(5).operator<<(“this”);
• 假定下面程序输出为 5hello, 该补写些什么
class CStudent{public: int nAge;};int main(){CStudent s ;s.nAge = 5;cout << s <<"hello";return 0;}
补写:
ostream & operator<<( ostream & o,const CStudent & s){o << s.nAge ;return o;}
例题
假定c是Complex复数类的对象,现在希望写“ cout << c;”,就能以“ a+bi”的形式输出c的值,写“cin>>c;”,就能从键盘接受“ a+bi”形式的输入,并且使得c.real = a,c.imag = b。
#include <iostream>#include <string>#include <cstdlib>using namespace std;class Complex {double real,imag;public:Complex( double r=0, double i=0):real(r),imag(i){ };friend ostream & operator<<( ostream & os,const Complex & c);friend istream & operator>>( istream & is,Complex & c);};ostream & operator<<( ostream & os,const Complex & c){os << c.real << "+" << c.imag << "i"; //以"a+bi"的形式输出return os;}istream & operator>>( istream & is,Complex & c){string s;is >> s; //将"a+bi"作为字符串读入, “a+bi” 中间不能有空格int pos = s.find("+",0);string sTmp = s.substr(0,pos); //分离出代表实部的字符串c.real = atof(sTmp.c_str());//atof库函数能将const char*指针指向的内容转换成float sTmp = s.substr(pos+1, s.length()-pos-2); //分离出代表虚部的字符串c.imag = atof(sTmp.c_str());return is;}int main(){Complex c;int n;cin >> c >> n;cout << c << "," << n;return 0;}程序运行结果可以如下:
13.2+133i 87↙
13.2+133i, 87
0 0
- 运算符重载-流插入运算符和流提取运算符的重载
- 重载流插入运算符<<和流提取运算符>>
- 重载流插入运算符和流提取运算符
- 重载流插入运算符和流提取运算符
- 流插入运算符流提取运算符的重载
- 重载之重载流插入和流提取运算符
- 重载流插入/流提取运算符
- C++之运算符的重载三:重载流插入运算符和流提取运算符
- C++的流插入运算符“<<”和流提取运算符“>>”的重载
- 流插入运算符和流提取运算符的重载
- 关于重载流插入运算符和流提取运算符的问题
- 057day(流插入,流提取运算符和类型转换运算符的重载)
- 重载流插入和流提取运算符
- 重载流提取运算符
- 重载流插入运算符
- 重载提取运算符“>>”
- C++语言基础 例程 重载流插入运算符和流提取运算符
- 重载流插入运算符《和流提取运算符》 第五题
- RS232,RS485波形分析
- table中如何消除td间距
- CODEVS 1174 靶形数独
- 【Goodbye2014】Codeforces 500C New Year Book Reading【贪心+模拟】
- 腾讯云Badjs镜像使用入门
- 运算符重载-流插入运算符和流提取运算符的重载
- 在eclipse里的tomcat发布项目提示404错误,可能的情况
- 2017.2.25 B组 倒霉的小C 题解及其证明
- USART输出乱码3F,RS485抄表
- MPAndroidChart图形框架(详细使用基本API)
- 嵌入式软件设计(1)--概述
- Modbus抄表中应用到CRC8+CRC16+CRC32源码
- 小白笔记--------------------------java关键词static
- leecode 解题总结:343. Integer Break