C++ 重载运算符和重载函数


C++ 重载运算符和重载函数

重载运算符

C++ 中允许程序员重载运算符,使其可以适应不同数据类型的操作。重载运算符的实现需要编写特殊的函数,这些函数会在运算符被使用时自动调用。

重载运算符的格式

在类中,重载运算符的函数遵循特定的格式:

返回类型 operator 运算符 (参数列表) {
    // 运算符的实现
}

其中,返回类型代表运算符的结果类型,运算符代表要重载的运算符,参数列表代表运算符的参数。

例如,以下代码重载了加法运算符:

class Number {
public:
    int value;

    Number operator+(const Number& other) {
        Number result;
        result.value = value + other.value;
        return result;
    }
};

在这个例子中,operator+ 函数被定义为类的成员函数,它的参数是一个常量引用 const Number&,表示重载的是加法运算符。函数返回的结果是一个 Number 类型。

重载运算符的调用

使用重载运算符时,编译器会自动调用对应的重载函数。例如,以下代码演示了如何使用重载的加法运算符:

Number a, b, c;
a.value = 1;
b.value = 2;
c = a + b;

在这个例子中,a + b 表示调用重载的加法运算符,由于 ab 都是 Number 类型,编译器会自动调用 operator+ 函数,将它们相加并返回结果,赋值给 c

需要注意的是,重载运算符的调用方式和普通函数不同,在调用时不需要使用函数名,直接使用运算符即可。

重载函数

C++ 中允许程序员定义同名不同参数的函数,这就是函数重载。函数重载的实现需要编写特殊的函数,这些函数会根据参数的不同自动匹配调用。

重载函数的格式

在 C++ 中,函数重载的格式如下:

返回类型 函数名(参数列表1) {
    // 实现1
}

返回类型 函数名(参数列表2) {
    // 实现2
}

// 其他重载函数

其中,函数名代表要重载的函数名,参数列表1 和参数列表2 代表重载的参数列表。函数名和返回类型都必须相同,但参数列表可以不同,可以有不同数量、不同类型和不同顺序的参数。

例如,以下代码定义了两个重载的函数:

int square(int x) {
    return x * x;
}

double square(double x) {
    return x * x;
}

第一个函数接受一个整型参数,第二个函数接受一个双精度浮点数参数,它们都返回参数的平方。

重载函数的调用

在调用函数时,编译器会自动匹配参数类型和数量,调用对应的重载函数。例如,以下代码演示了如何调用上面的重载函数:

int a = 3;
double b = 1.5;
int c = square(a); // 调用 square(int)
double d = square(b); // 调用 square(double)

在这个例子中,a 是整型,调用了 square(int) 函数,返回其平方。b 是双精度浮点数,调用了 square(double) 函数,返回其平方。