c++输入输出运算符重载
时间: 2023-05-21 08:04:12 浏览: 92
C++中,我们可以通过重载输入输出运算符来实现自定义类型的输入输出。输入运算符通常为"<<",输出运算符为">>",举个例子:
```
class Point {
public:
Point(int x = 0, int y = 0) : m_x(x), m_y(y) {}
friend std::ostream& operator<<(std::ostream& os, const Point& p) {
os << "(" << p.m_x << ", " << p.m_y << ")";
return os;
}
friend std::istream& operator>>(std::istream& is, Point& p) {
is >> p.m_x >> p.m_y;
return is;
}
private:
int m_x;
int m_y;
};
```
在上面的例子中,我们给Point类重载了输入输出运算符,使得我们可以像使用cout和cin一样来输出和输入Point类型的对象。
当使用cout输出Point对象时,我们实际上是调用了重载的输出运算符,输出的内容为"(x, y)"。而当使用cin读入Point对象时,我们实际上是调用了重载的输入运算符,将读入的值赋给Point对象的成员变量m_x和m_y。
总之,重载输入输出运算符可以让我们方便地使用自定义类型,从而提高代码的可读性和可维护性。
相关问题
C++中复数的输入输出运算符重载
在C++中,复数类型的输入输出运算符重载可以使用以下方式实现:
```cpp
#include <iostream>
using namespace std;
class Complex {
private:
double real;
double imag;
public:
Complex() {}
Complex(double r, double i) : real(r), imag(i) {}
friend istream& operator>>(istream& in, Complex& c) {
cout << "请输入实部和虚部,用空格隔开:" << endl;
in >> c.real >> c.imag;
return in;
}
friend ostream& operator<<(ostream& out, const Complex& c) {
out << c.real << "+" << c.imag << "i";
return out;
}
};
int main() {
Complex c1;
cin >> c1;
cout << "您输入的复数为:" << c1 << endl;
return 0;
}
```
在上面的示例中,输入运算符重载函数`operator>>`使用`istream`类型的输入流对象`in`来获取用户输入的实部和虚部,并将其存储到复数对象`c`的成员变量中。输出运算符重载函数`operator<<`使用`ostream`类型的输出流对象`out`来输出复数对象`c`的实部和虚部。这里使用了友元函数来访问类的私有成员变量。
用代码实现输入输出运算符重载
在C++中,你可以通过运算符重载(operator overloading)来改变类的对象如何参与算术运算或比较运算。特别是对于输入输出(I/O)运算符`<<`和`>>`,你可能想要自定义它们的行为以便适应特定的数据类型。以下是如何重载这些运算符的示例:
```cpp
class MyClass {
public:
// 重载输入运算符(用于左操作)
friend std::ostream& operator<<(std::ostream& os, const MyClass& obj) {
os << "MyClass: " << obj.myData; // 假设myData是类中的一个成员变量
return os;
}
// 重载输出运算符(用于右操作)
friend std::istream& operator>>(std::istream& is, MyClass& obj) {
is >> obj.myData; // 从输入流读取数据到myData
return is;
}
private:
int myData; // 类中的数据成员
};
// 使用例子
int main() {
MyClass obj;
std::cout << "Enter a value for MyClass: ";
std::cin >> obj;
// 输出
std::cout << "You entered: " << obj; // 自定义的输出形式
return 0;
}
```
阅读全文