C++ 输入、输出运算符重载

C++ 能够使用流提取运算符 >> 和流插入运算符 << 来输入和输出内置的数据类型。我们可以重载流提取运算符和流插入运算符来操作对象等用户自定义的数据类型。

在这里,有一点很重要,我们需要把运算符重载函数声明为类的友元函数,这样我们就能不用创建对象而直接调用函数。
下面的实例演示了如何重载提取运算符 >> 和插入运算符 <<。

#include <iostream>

using namespace std;

class Person{
public:
    Person(const char *str) : name(str){}

    int GetAge(){
        return this->age;
    }

    /* 声明为类的友元函数 */
    friend ostream& operator<<(ostream& output, Person &p){
        output << p.name << endl;
        return output;
    }

    friend istream& operator>>(istream& input, Person &p){
        input >> p.age;
        return input;
    }

private:
    const char *name;
    int age;
};

int main()
{
    Person p("Tom");

    /* 重载输出名字 */
    cout << p;

    /* 重载输入年龄 */
    cin >> p;

    /* 输出年龄 */
    cout << p.GetAge() << endl;

    return 0;
}

原文地址:https://www.cnblogs.com/GyForever1004/p/8476644.html

时间: 2024-08-01 17:00:48

C++ 输入、输出运算符重载的相关文章

C++运算符重载——输入/输出运算符

为了与IO标准库一致,重载输入输出运算符函数的第一个行参应该是流的引用,第二个行参是对象的引用. 如果重载为类的成员函数,第一个行参应该是对象的引用,第二个行参是流的引用. 使用方式是 ClassObj << cout 这样与标准IO库就不一致了,所以输入输出运算符不能重载为类的成员函数,可以重载为类的友元函数和普通函数. 通常重载输出运算符的第二个行参是const的,因为输出一个类不许要更改它: 但是重载输入运算符的第二个行参必须是非const的,否则无法赋值. 重载的基本方法如下: //重

C++ Primer笔记10_运算符重载_赋值运算符_输入/输出运算符

我们致力于推广Scriptcase,以产品销售.技术支持.培训服务.外包开发为核心,将Scriptcase这一简单易用的工具真正在国内予以推广.我们搭建了Scriptcase的示例网站,通过该网站可以看到在几乎不需要任何编程的情况下,Scriptcase可以做到如何快速和先进的开发. 敬请访问 www.phpscriptcase.com C++ Primer笔记10_运算符重载_赋值运算符_输入/输出运算符

C++基础5 运算符重载【提高】

1)括号运算符()重载 2)[面试题]&&, || 能不能做 操作符重载? 3)运算符极致练习: [提高]运算符重载 括号运算符()重载 [email protected]:~/c++$ cat main.cpp  #include <iostream> using namespace std; class A { public: A(int a,int b) { this->a = a; this->b = b; } int operator()(int a,in

运算符重载的宏观思考The Complex Class

运算符重载是C++中较C语言更加先进和灵活的地方之一,通过运算符重载,使运算符拥有了除了只能完成内置类型的运算操作之外的对于其他自定义类型的运算功能.这使得C++更加灵活,通俗,更加面向对象. 事实上运算符的重载不过是对函数名为"operator 运算符"的函数的定义,根据所操作的对象的不同,可以分为成员函数和友元函数两种定义方法. C++中唯一的三目运算符不能重载,因此所有的运算符重载的形参都不会超过三个,又由于成员函数默认第一个形参必须是自定义类的对象并且默认绑定到*this指针,

复数中的运算符重载(续)

输入代码: /* *Copyright (c)2015,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:sum123.cpp *作 者:林海云 *完成日期:2015年5月11日 *版 本 号:v2.0 * *问题描述:在复数类中的运算符重载基础上 (1)再定义一目运算符 -,-c相当于0-c. (2)定义Complex类中的<<和>>运算符的重载,实现输入和输出,改造原程序中对运算结果显示方式,使程序读起来更自然. *程序输入:按要求输入两个复

运算符重载(三)

我们知道运算符重载函数可以选择两种形式(1)成员函数形式   (2) 全局友元函数形式.那么我们应该怎么样选择呢? 首先按照语法规定有的运算符只能由成员函数重载的运算符,例如operator[],operator=.而有些运算符既可以用成员函数重载,也可以冲全局友元函数重载,例如:++ ,——,+,—,+=,—=等,像这种既可以用成员函数重载也可以用全局友元函数重载的运算符,我们建议用成员函数重载,因为这样做强调了运算符和类的联合,尤其是二元运算符重载时,当左侧操作数是当前的对象时,运算符会工作

二元运算符重载

------------------siwuxie095 二元运算符重载 所谓 二元运算符,即 这个符号与两个操作数进行运算 (1)加号 + 的重载 加号 + 的重载方式有两种:一种是友元函数重载,一种是成员函数重载 1)先来看成员函数重载,如下: 定义一个坐标类:Coordinate 在类中声明成员函数 operator+(),它的参数是 const Coordinate &coor 在实现时: 首先需要定义一个临时对象 temp,传入对象 coor 的 m_iX 要和 当前对象的 m_iX

C++之运算符重载(二元)

一.加号+ 1.成员函数重载 2.友元函数重载 二.输出符号<< 三.索引符号 [ ] 四.补充说明 1.<二元运算符重载>课程评论: (一)为什么<<运算符的重载必须定义为友元 如果在类中定义非友元成员函数,默认第一个参数默认会传入this*指针,这时就无法实现cout在前<<对象在后的格式 因为二元运算符中的调用格式是 参数一 运算符 参数二 这也就是为什么 加号运算符可以使用非友元成员函数,因为参数一是一个this*指针,参数二是其它对象 假设定义为非

通过重载输入和输出运算符实现复数的输入和输出

程序代码: #include <iostream> using namespace std; class Complex { public: Complex( )//定义默认构造函数初始化复数 { real=0; imag=0; } //使用初始化表初始化复数 Complex(double r, double i):real(r),imag(i){} Complex operator+(Complex &c2);//复数的加法 Complex operator-(Complex &am