C++运算符重载详解与实例

版权申诉
0 下载量 85 浏览量 更新于2024-07-07 收藏 20KB PDF 举报
"该资源是关于计算机二级C++考试中涉及的运算符重载专题的PDF文档,主要讲解了运算符重载的概念、方法及在复数类中的应用实例。" 在C++编程语言中,运算符重载是一种重要的多态性表现形式,允许我们为同一个运算符赋予不同的含义,以便在不同上下文中使用。运算符重载可以增加代码的可读性和简洁性,特别是在自定义数据类型(如本例中的复数类)中。在本资料中,它主要探讨了两种运算符重载的方式:作为类的成员函数和友元函数。 1. 重载为类的成员函数: 这是最常见的运算符重载形式。在这种情况下,运算符函数成为类的成员,通常需要一个隐含的`this`指针作为第一个参数,用于访问调用运算符的类对象。例如,在给出的复数类`complex`中,我们看到四个运算符重载成员函数:`operator+`、`operator-`、`operator*`和`operator/`,它们接受一个`complex`类型的引用作为参数,返回一个新的`complex`对象,表示运算结果。 ```cpp class complex { public: // ...构造函数等其他成员... complex operator+(complex& c); // 加法运算符重载 complex operator-(complex& c); // 减法运算符重载 complex operator*(complex& c); // 乘法运算符重载 complex operator/(complex& c); // 除法运算符重载 // ...其他成员... }; ``` 每个运算符重载函数的实现都通过复数的实部和虚部进行计算,返回一个新的`complex`对象。例如,加法运算符重载: ```cpp inline complex complex::operator+(complex& c) { return complex(real + c.real, imag + c.imag); } ``` 这里使用了内联函数(`inline`关键字)来提高效率,因为这些运算符可能会被频繁调用。 2. 友元函数: 虽然在给定的示例中没有使用友元函数进行运算符重载,但通常情况下,如果运算符需要访问类的私有或保护成员,而重载为成员函数又不切实际时,可以考虑使用友元函数。友元函数不是类的成员,但它可以直接访问类的私有和保护成员。例如,我们可以将`print`函数设为`complex`类的友元,以方便打印复数对象。 ```cpp class complex { public: // ...其他成员... friend void print(complex& c); // 声明print为友元函数 }; void print(complex& c) { if (c.imag < 0) cout << c.real << " - " << c.imag << "i"; else cout << c.real << " + " << c.imag << "i"; } ``` 在主程序`main`中,我们可以创建`complex`对象并使用运算符重载进行操作,然后打印结果: ```cpp int main() { complex c1(2.0, 3.0), c2(4.0, -2.0), c3; c3 = c1 + c2; // 使用重载的加法运算符 print(c3); // 打印c3 // ...其他操作... } ``` 运算符重载是C++中一个强大的特性,它可以增强类的设计灵活性,使代码更加符合数学表达式的直观性。通过理解并掌握运算符重载,开发者能够更好地设计和实现自定义数据类型,提高程序的可读性和易用性。