zoukankan      html  css  js  c++  java
  • C++ 重载 << 和 >> 运算符

    流提取运算符(>>)和流插入运算符(<<)可以被重载用于输入输出操作。

    注意,我们到目前为止,必须调用toString() 函数返回一个表示Rational对象的字符串,再把它显示出来。例如,为了显示Rational 对象r,要编写一下代码:

    //形式1
    cout << r.toString();

    而不能直接使用:

    //形式2
    cout << r;

    但我们平时见到的int、double、string类型都可以直接使用 << 和 >> 运算符,所以我们来重载一下。

    上面的形式2等同于:

    << (cout, r)
    //或者
    operator << (cout, r)

    运算符 << 有两个操作数,即cout和r,分别是ostream类的实例,和Rational类的实例。因此,cout不能作为Rational类的成员函数被重载,所以我们把它声明为Rational类的友元函数(详见C++ 访问私有成员——友元函数和友元类

    friend ostream& operator<<(ostream& out, const Rational rational);

    实现:

    ostream& operator<<(ostream& out, const Rational rational) {
        out << rational.numerator << "/" << rational.denominator;
        return out;
    }

    同理,重载 >> 运算符时也要声明为友元函数

    friend istream& operator>>(istream& in, Rational& rational);

    实现(注意添加头文件<iostream>,因为cout在<iostream>中):

    istream& operator>>(istream& in, Rational& rational) {
        cout << "Enter numerator: ";
        in >> rational.numerator;
    
        cout << "Enter denominator: ";
        in >> rational.denominator;
    
        return in;
    }

    测试:

    #include <iostream>
    #include "Rational.h"
    
    using namespace std;
    
    int main()
    {
        Rational r1, r2;
    
        cout << "第1个有理数" << endl;
        cin >> r1;
    
        cout << "第2个有理数" << endl;
        cin >> r2;
    
        cout << "r1 = " << r1 << "
    r2 = " << r2 << endl;
    
        return 0;
    }

    运行结果:

  • 相关阅读:
    自制游戏Zombie代码
    HNOI2020总结
    20200615题解:继续扮演
    20200611题解:树网的核
    历次考试总结
    寒假总结和省选大体规划
    每日总结
    有一种感动叫ACM(记WJMZBMR在成都赛区开幕式上的讲话)
    递推求欧拉函数的最简单的详解
    总结一些好用的C++小技巧
  • 原文地址:https://www.cnblogs.com/bwjblogs/p/13032396.html
Copyright © 2011-2022 走看看