C++运算符重载三种形式(成员函数,友元函数,普通函数)详解的完整攻略
在C++中,运算符重载是一种强大的特性,它允许我们重新定义运算符的行为。C++中有三种形式的运算符重载:成员函数、友元函数和普通函数。以下是这三种形式的详细攻略。
成员函数
成员函数是定义在类中的函数,它们可以访问类的私有成员。成员函数的一种形式是运算符重载。以下是成员函数运算符重载的步骤:
-
在类中声明运算符函数。运算符函数的名称是运算符符号,例如“+”、“-”、“*”、“/”等。
-
在类外部定义运算符函数。运算符函数必须是类的成员函数。
-
在运算符函数中实现运算符的重载。
以下是一个示例,展示如何使用成员函数重载运算符“+”:
class Complex {
public:
Complex operator+(const Complex& other) const {
Complex result;
result.real = real + other.real;
result.imag = imag + other.imag;
return result;
}
private:
double real;
double imag;
};
在这个示例中,我们定义了一个名为“operator+”的成员函数,它接受一个类型为“Complex”的参数,并返回一个类型为“Complex”的值。在函数中,我们将两个复数的实部和虚部相加,并返回一个新的复数。
友元函数
友元函数是定义在类外部的函数,它们可以访问类的私有成员。友元函数的一种形式是运算符重载。以下是友元函数运算符重载的步骤:
-
在类中声明运算符函数。运算符函数的名称是运算符符号,例如“+”、“-”、“*”、“/”等。
-
在类外部定义运算符函数。运算符函数必须是友元函数。
-
在运算符函数中实现运算符的重载。
以下是一个示例,展示如何使用友元函数重载运算符“+”:
class Complex {
public:
friend Complex operator+(const Complex& a, const Complex& b) {
Complex result;
result.real = a.real + b.real;
result.imag = a.imag + b.imag;
return result;
}
private:
double real;
double imag;
};
在这个示例中,我们定义了一个名为“operator+”的友元函数,它接受两个类型为“Complex”的参数,并返回一个类型为“Complex”的值。在函数中,我们将两个复数的实部和虚部相加,并返回一个新的复数。
普通函数
普通函数是定义在类外部的函数,它们不能访问类的私有成员。普通函数的一种形式是运算符重载。以下是普通函数运算符重载的步骤:
-
在类外部声明运算符函数。运算符函数的名称是运算符符号,例如“+”、“-”、“*”、“/”等。
-
在类外部定义运算符函数。
-
在运算符函数中实现运算符的重载。
以下是一个示例,展示如何使用普通函数重载运算符“+”:
class Complex {
public:
double real;
double imag;
};
Complex operator+(const Complex& a, const Complex& b) {
Complex result;
result.real = a.real + b.real;
result.imag = a.imag + b.imag;
return result;
}
在这个示例中,我们定义了一个名为“operator+”的普通函数,它接受两个类型为“Complex”的参数,并返回一个类型为“Complex”的值。在函数中,我们将两个复数的实部和虚部相加,并返回一个新的复数。
示例说明
以下是两个示例,展示如何使用运算符重载:
示例1:使用成员函数重载运算符“+”
#include <iostream>
class Complex {
public:
Complex(double r = 0.0, double i = 0.0) : real(r), imag(i) {}
Complex operator+(const Complex& other) const {
Complex result;
result.real = real + other.real;
result.imag = imag + other.imag;
return result;
}
void print() const {
std::cout << "(" << real << ", " << imag << ")" << std::endl;
}
private:
double real;
double imag;
};
int main() {
Complex a(1.0, 2.0);
Complex b(3.0, 4.0);
Complex c = a + b;
c.print();
return 0;
}
在这个示例中,我们定义了一个名为“Complex”的类,它有一个成员函数“operator+”,用于重载运算符“+”。我们创建了两个复数a和b,并将它们相加,然后将结果存储在c中。最后,我们调用c的print函数,以显示结果。
示例2:使用友元函数重载运算符“+”
#include <iostream>
class Complex {
public:
Complex(double r = 0.0, double i = 0.0) : real(r), imag(i) {}
friend Complex operator+(const Complex& a, const Complex& b) {
Complex result;
result.real = a.real + b.real;
result.imag = a.imag + b.imag;
return result;
}
void print() const {
std::cout << "(" << real << ", " << imag << ")" << std::endl;
}
private:
double real;
double imag;
};
int main() {
Complex a(1.0, 2.0);
Complex b(3.0, 4.0);
Complex c = a + b;
c.print();
return 0;
}
在这个示例中,我们定义了一个名为“Complex”的类,它有一个友元函数“operator+”,用于重载运算符“+”。我们创建了两个复数a和b,并将它们相加,然后将结果存储在c中。最后,我们调用c的print函数,以显示结果。
结论
C++中的运算符重载是一种强大的特性,它允许我们重新定义运算符的行为。C++中有三种形式的运算符重载:成员函数、友元函数和普通函数。在使用运算符重载时,请确保您了解每种形式的用法,并正确实现运算符的重载。