C++的<<和>>以及它们的重载(重要)

输入输出运算符

包含头文件:iostream

所处命名空间:std

输入和输出运算符:cin、cout

流插入和流提取运算符:<<、>>

  • <<:用于将数据输出到输出流中(通常是标准输出 std::cout
  • >>:用于从输入流中读取数据(通常是标准输入 std::cin

换行符:endl

注意事项:

1、C++中,>>和<<仍是移位运算符,与cout和cin结合时就会变成流输入和流提取运算符

2、流插入和流提取运算符可以连续使用

cout << "hello world"<<i<<'\n'

int i;
char ch;
cin >> i >> ch;

3、printf函数在打印时需要指定格式化打印的类型,cout和cin函数可以自动识别内置类型的变量

int i = 10;
const char* str = "hello world";
char ch = '\n';

cout << str << i << ch <<endl;  //c++

printf("%s %d %c",str,i,ch);  //c语言

重载>>和<<

基本概念:为了使 <<>> 运算符能够处理自定义类对象的输入和输出,C++ 支持重载这些运算符。通过重载 <<>>,可以定义如何对自定义类型进行输出和输入

补充:因为重载>>和<<的第一个参数必须是istream和ostream(为了能向流中插入和从流中提取提取而做出的必须遵守的规定),如果将它们定义为Point类的成员函数那么第一个参数就是Point* this,会报错,所以应该采用友元函数的方式

#include <iostream>
using namespace std;

class Point {
private:
    int x, y;

public:
    Point(int x = 0, int y = 0) : x(x), y(y) {}
    friend istream& operator>>(istream& is, Point& p);
    friend ostream& operator<<(ostream& os, const Point& p);

};

// 重载 >> 运算符
istream& operator>>(istream& is, Point& p) {
    is >> p.x >> p.y;
    return is;
}

// 重载 << 运算符
ostream& operator<<(ostream& os, const Point& p) {
    os << "(" << p.x << ", " << p.y << ")";
    return os;
}

int main() {
    Point p;
    cout << "Enter coordinates for Point (x y): ";
    cin >> p;  // 使用重载的 >> 运算符读取 Point 对象
    cout << "You entered: " << p << endl;
    return 0;
}
  • 返回值是istream&和ostream&是为了后续能进行链式调用,cout << a<< b<<endl,在cout << a后会返回一个istream的对象,然后该对象又会继续被用来 istream对象 << b << endl

也可以为两个重载函数加上friend修饰写在Point类中,作为该类的内联友元函数(C++11引入)

#include <iostream>
using namespace std;

class Point {
private:
    int x, y;

public:
    Point(int x = 0, int y = 0) : x(x), y(y) {}
    friend istream& operator>>(istream& is, Point& p)
    {
        is >> p.x >> p.y;
        return is;
    }
    friend ostream& operator<<(ostream& os, const Point& p)
    {
        os << "(" << p.x << ", " << p.y << ")";
        return os;
    }
};

int main() {
    Point p;
    cout << "Enter coordinates for Point (x y): ";
    cin >> p;  // 使用重载的 >> 运算符读取 Point 对象
    cout << "You entered: " << p << endl;
    return 0;
}

~over~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值