📜  类外的运算符重载 - C++ (1)

📅  最后修改于: 2023-12-03 14:56:45.163000             🧑  作者: Mango

类外的运算符重载

C++ 允许对类的运算符进行重载,以实现用户自定义的一些操作。在类的内部,可以使用成员函数来重载运算符,但是,对于一些如赋值运算符和下标运算符等的运算符,我们更希望将其定义为非成员函数。

函数重载

在 C++ 中,函数重载是指在一个类中定义多个相同名称的函数,但它们具有不同的参数列表。

class MyClass {
public:
    void func(int x);
    void func(double x);
};

在上面的例子中,MyClass 类中定义了两个名为 func 的函数,它们具有不同的参数列表。当我们调用这个函数时,编译器会自动根据参数列表确定调用哪个函数。

运算符重载

除了函数重载外,C++ 还允许对运算符进行重载。在类中可以使用成员函数来重载运算符,但是,对于一些如赋值运算符和下标运算符等的运算符,我们更希望将其定义为非成员函数。

重载赋值运算符

下面是一个简单的例子,演示了如何重载赋值运算符:

class MyClass {
public:
    MyClass& operator=(const MyClass& other) {
        // 实现赋值的代码
        return *this;
    }
};

在上面的例子中,我们定义了一个名为 operator= 的函数,它具有一个名为 otherMyClass 类型参数,并返回一个 MyClass 引用。在函数体中,我们可以自定义赋值的操作,并将 this 指针作为引用返回。

重载下标运算符

下面是一个简单的例子,演示了如何重载下标运算符:

class MyClass {
public:
    int& operator[](int index) {
        // 实现下标运算的代码
    }
};

在上面的例子中,我们定义了一个名为 operator[] 的函数,它具有一个名为 indexint 类型参数,并返回一个 int 引用。在函数体中,我们可以自定义下标运算的操作,并将返回值作为引用返回。

类外运算符重载

类外的运算符重载就是在类外定义重载运算符函数。具体的实现方式与普通的函数定义类似。

class MyClass {
public:
    int data;
};

MyClass operator+(const MyClass& a, const MyClass& b) {
    MyClass result;
    result.data = a.data + b.data;
    return result;
}

在上面的例子中,我们在类外定义了一个名为 operator+ 的函数,它具有两个名为 abMyClass 类型参数,并返回一个 MyClass 对象。在函数体中,我们可以自定义 + 运算符的操作,并将结果作为 MyClass 对象返回。

总结

在 C++ 中,我们可以使用函数重载和运算符重载来定制类的操作。其中,类外运算符重载可以更加方便地实现一些运算符的重载,例如加、减、乘、除等。

# 类外的运算符重载

本文将为大家介绍 C++ 中如何进行类外的运算符重载。

## 1. 函数重载

在 C++ 中,函数重载是指在一个类中定义多个相同名称的函数,但它们具有不同的参数列表。函数重载的实现方式与普通函数定义类似,只是在函数名和参数列表上稍作不同。下面是一个简单的例子:

```cpp
class MyClass {
public:
    void func(int x);
    void func(double x);
};

在上面的例子中,我们定义了一个名为 MyClass 的类,并在其中定义了两个名为 func 的函数,它们具有不同的参数列表。当我们调用这个函数时,编译器会自动根据参数列表确定调用哪个函数。

2. 运算符重载

除了函数重载外,C++ 还允许对运算符进行重载。在类中可以使用成员函数来重载运算符,但是,对于一些如赋值运算符和下标运算符等的运算符,我们更希望将其定义为非成员函数。下面是两个简单的例子:

2.1 重载赋值运算符
class MyClass {
public:
    MyClass& operator=(const MyClass& other) {
        // 实现赋值的代码
        return *this;
    }
};

在上面的例子中,我们定义了一个名为 operator= 的函数,它具有一个名为 other 的 MyClass 类型参数,并返回一个 MyClass 引用。在函数体中,我们可以自定义赋值的操作,并将 this 指针作为引用返回。

2.2 重载下标运算符
class MyClass {
public:
    int& operator[](int index) {
        // 实现下标运算的代码
    }
};

在上面的例子中,我们定义了一个名为 operator[] 的函数,它具有一个名为 index 的 int 类型参数,并返回一个 int 引用。在函数体中,我们可以自定义下标运算的操作,并将返回值作为引用返回。

2.3 类外运算符重载

类外的运算符重载就是在类外定义重载运算符函数。具体的实现方式与普通的函数定义类似。下面是一个简单的例子:

class MyClass {
public:
    int data;
};

MyClass operator+(const MyClass& a, const MyClass& b) {
    MyClass result;
    result.data = a.data + b.data;
    return result;
}

在上面的例子中,我们在类外定义了一个名为 operator+ 的函数,它具有两个名为 a 和 b 的 MyClass 类型参数,并返回一个 MyClass 对象。在函数体中,我们可以自定义 + 运算符的操作,并将结果作为 MyClass 对象返回。

3. 总结

在 C++ 中,我们可以使用函数重载和运算符重载来定制类的操作。其中,类外运算符重载可以更加方便地实现一些运算符的重载,例如加、减、乘、除等。