c++重载运算符()
时间: 2023-08-20 21:08:48 浏览: 45
C++中的运算符()可以被重载,也被称为函数调用运算符。重载运算符()允许对象像函数一样被调用,以执行特定的操作。
要重载运算符(),需要在类中定义一个成员函数,其名称为operator(),并指定所需的参数和返回类型。这样,在使用对象时,可以像调用函数一样使用括号运算符来调用重载的运算符()。
下面是一个示例,演示了如何重载运算符():
```cpp
#include <iostream>
class MyFunction {
public:
int operator()(int x, int y) {
return x + y;
}
};
int main() {
MyFunction add;
int result = add(3, 4);
std::cout << "Result: " << result << std::endl;
return 0;
}
```
在上面的示例中,我们定义了一个名为MyFunction的类,并在其中重载了运算符()。重载的运算符()接受两个整数参数,并返回它们的和。在主函数中,我们创建了一个MyFunction对象add,并使用括号运算符调用它,传递了参数3和4。最后,将结果打印输出。
请注意,运算符()可以具有不同的参数类型和返回类型,根据需要进行适当的重载。
相关问题
c++重载运算符
C++中可以对很多运算符进行重载,例如加减乘除、赋值、比较等等。重载运算符可以使得程序更加简洁、易读、易维护。
重载运算符的一般语法为:
```cpp
返回类型 operator 运算符(参数列表) {
// 函数体
}
```
其中,`operator`关键字表明这是一个运算符重载函数,`运算符`指定要重载的运算符,`参数列表`指定重载运算符的参数,`返回类型`指定运算符重载函数的返回类型。
例如,重载加法运算符的代码如下:
```cpp
class Complex {
public:
Complex(double r, double i) : real(r), imag(i) {}
Complex operator+(const Complex& other) const {
return Complex(real + other.real, imag + other.imag);
}
private:
double real;
double imag;
};
```
在上述代码中,我们将`+`运算符重载为一个成员函数`operator+`,其参数为另一个`Complex`对象,返回值也是一个`Complex`对象。在函数体中,我们实现了两个复数相加的操作,返回一个新的`Complex`对象。
使用重载运算符时,可以像使用内置类型一样使用自定义类型。例如:
```cpp
Complex a(1, 2);
Complex b(3, 4);
Complex c = a + b;
```
在上述代码中,`a + b`就是一个使用重载加法运算符的表达式,其结果被赋值给了`c`对象。
c++重载运算符技巧
C++中的运算符重载是一种特殊的多态性,它允许我们重新定义已有的运算符,以便用于用户自定义的数据类型。以下是一些C++重载运算符的技巧:
1. 运算符重载函数必须是类的成员函数或全局函数,但不能是普通的成员函数。
2. 重载运算符函数的名称必须是operator后面跟着要重载的运算符符号,例如+、-、*、/等。
3. 重载运算符函数可以有任意数量的参数,但必须至少有一个参数是类类型或枚举类型。
4. 重载运算符函数可以返回任何类型的值,但通常返回一个新的类对象。
5. 重载运算符函数可以是const函数,这意味着它不会修改类的成员变量。
6. 重载运算符函数可以是友元函数,这意味着它可以访问类的私有成员变量。
以下是一个C++重载运算符的例子:
```cpp
#include <iostream>
using namespace std;
class Complex {
public:
Complex(double r = 0.0, double i = 0.0) : real(r), imag(i) {}
Complex operator+(const Complex& c) const {
return Complex(real + c.real, imag + c.imag);
}
friend ostream& operator<<(ostream& os, const Complex& c) {
os << c.real << "+" << c.imag << "i";
return os;
}
private:
double real;
double imag;
};
int main() {
Complex c1(1.0, 2.0);
Complex c2(3.0, 4.0);
Complex c3 = c1 + c2;
cout << c3 << endl; // 输出:4+6i
return 0;
}
```