重载运算符函数 operator<<
时间: 2023-10-30 13:15:30 浏览: 61
重载运算符函数 operator<< 用于向流中插入对象的值。它通常用于输出对象的值,比如在控制台上输出、输出到文件中等。
以下是一个重载运算符函数 operator<< 的示例:
```
#include <iostream>
class Point {
public:
Point(int x, int y) : x_(x), y_(y) {}
friend std::ostream& operator<<(std::ostream& os, const Point& p) {
os << "(" << p.x_ << ", " << p.y_ << ")";
return os;
}
private:
int x_, y_;
};
int main() {
Point p(1, 2);
std::cout << p << std::endl;
return 0;
}
```
在上面的示例中,我们定义了一个 Point 类,它有两个整数成员变量 x_ 和 y_。我们重载了运算符函数 operator<<,它接受一个 std::ostream 对象和一个 Point 对象,并将 Point 对象的值输出到 std::ostream 对象中。在 main 函数中,我们创建了一个 Point 对象 p,并使用 std::cout 输出它的值。输出的结果为 "(1, 2)"。
相关问题
运算符重载<<
运算符重载<<是C++中常用的一种操作,它可以将一个对象以特定的格式输出到控制台或文件中。通常情况下,运算符重载<<会被定义为类的友元函数,以便访问类中的私有成员变量。
例如,我们可以定义一个输出复数的类,然后重载运算符<<以便以我们想要的格式输出复数。假设我们的复数类定义如下:
```
class Complex {
private:
double real;
double imag;
public:
Complex(double r, double i) : real(r), imag(i) {}
friend ostream& operator<<(ostream& os, const Complex& c);
};
```
我们可以在类定义外部重载运算符<<,并将其声明为该类的友元函数,以便访问私有成员变量:
```
ostream& operator<<(ostream& os, const Complex& c) {
os << c.real << " + " << c.imag << "i";
return os;
}
```
现在我们可以使用运算符<<将复数对象输出到控制台:
```
Complex c(3.5, 2.1);
cout << c << endl; // 输出 3.5 + 2.1i
```
这就是运算符重载<<的基本用法。
重载插入运算符"<<"必须采用成员重载
重载插入运算符`<<`并不一定必须采用成员函数重载,也可以采用友元函数重载。但是,如果我们要将重载插入运算符`<<`用于输出一个类对象的信息,那么我们通常会选择采用成员函数重载,因为成员函数可以访问类的私有成员,更方便地输出类对象的信息。
例如,我们可以将`<<`运算符重载为该类的成员函数,其原型如下:
```cpp
class MyClass {
public:
// 类定义中的其他成员函数和数据成员
friend ostream& operator<<(ostream& os, const MyClass& obj);
// 友元函数重载插入运算符<<,参数为输出流对象和该类的常量引用,返回值为输出流对象
};
ostream& operator<<(ostream& os, const MyClass& obj) {
// 输出该类对象的信息
os << "MyClass object with data: " << obj.data << endl;
// ...
return os;
}
```
在这个例子中,我们将`<<`运算符重载为`MyClass`类的友元函数,其参数包括一个`ostream`类型的输出流对象和一个`MyClass`类型的常量引用。这样,我们就可以通过`cout << obj`的形式来输出一个`MyClass`对象的信息。
虽然友元函数重载`<<`运算符也是可行的,但它需要在类定义之外定义,看起来不如成员函数重载直观。因此,通常我们会优先考虑将`<<`运算符重载为该类的成员函数。