输入输出运算符
包含头文件: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~