zoukankan      html  css  js  c++  java
  • 《新标准C++程序设计》4.6(C++学习笔记16)

    重载流插入运算符和流提取运算符

    流插入运算符:“<<”

    流提取运算符:“>>”

    cout 是在 iostream 中定义的,ostream 类的对象。

    “<<” 能用在cout 上是因为,在iostream里对 “<<” 进行了重载。

    怎么重载才能使得cout << 5; 和 cout << “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”);

    Question:

    假定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 & osconst 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

  • 相关阅读:
    HDFS文件系统上传时序图 PB级文件存储时序图
    HDFS 文件系统流程图。PB级文件存储时序图。
    HBase 1.1.2 优化插入 Region预分配
    InputStream、OutputStream
    StringBuffer_StringBuilder
    java中的字符串
    升级的三个因素
    装饰设计模式
    IO字符流之读写缓冲区(BufferedWriter、BufferedReader)
    IO(FileWriter/FileReader)字符流:文件的写入、续写、读
  • 原文地址:https://www.cnblogs.com/cyn522/p/12313744.html
Copyright © 2011-2022 走看看