C++运算符重载:成员函数与友元函数的实现

需积分: 45 14 下载量 197 浏览量 更新于2024-08-09 收藏 6.57MB PDF 举报
"C++ 谭浩强" 在C++编程中,运算符重载是一项重要的特性,允许我们根据需要为已有的运算符赋予新的含义。标题提及的"程序中的重载函数中只有一个参数"是指在重载二元运算符如"+"时,虽然通常运算符两边都有操作数,但在实现为成员函数时,一个操作数(通常是左侧的操作数)可以通过`this`指针隐式地访问,因此函数只需要显式声明一个参数,即右侧的操作数。 例如,在`Complex`类中重载"+"运算符,我们可以定义如下成员函数: ```cpp class Complex { public: Complex operator+(const Complex& c2) const { return Complex(this->real + c2.real, this->imag + c2.imag); } // ... private: double real; double imag; }; ``` 在这个例子中,`operator+`函数接受一个`Complex`类型的引用`c2`作为参数,`this`指针则隐式地代表调用该函数的对象(即运算符左侧的`Complex`实例)。函数返回的是两个`Complex`对象的和。 除了作为成员函数,运算符重载也可以是非成员函数。这样做可以使代码更加清晰,有时可以避免隐藏的`this`指针可能导致的混淆。例如,可以定义一个全局的友元函数来实现相同的功能: ```cpp class Complex { public: friend Complex operator+(const Complex& c1, const Complex& c2) { return Complex(c1.real + c2.real, c1.imag + c2.imag); } // ... }; // 使用非成员重载运算符 Complex sum = c1 + c2; ``` 在这个非成员函数版本中,两个操作数都作为参数传递,没有`this`指针的隐式使用。这种实现方式使得代码更易于理解和测试,因为它明确地表明了函数处理两个独立的`Complex`对象。 在谭浩强的《C++程序设计》一书中,作者详细介绍了从基础的C语言到C++的过渡,以及C++如何通过面向对象的机制扩展了C语言的功能。书中的第10章专门讨论了运算符重载,讲解了如何通过成员函数和友元函数来重载运算符,以及它们在不同情况下的适用性和优缺点。 面向对象的程序设计是C++的一大特点,通过类和对象的概念,可以更好地组织和管理代码,提高代码的可重用性和可维护性。继承、派生和多态性等概念进一步增强了C++的面向对象能力,使得开发大型软件变得更加高效。输入输出流和C++工具等章节则介绍了C++在实际应用中的高级特性,帮助开发者更好地进行系统级编程和库的使用。 理解运算符重载在C++中的作用和实现方式是掌握C++面向对象编程的关键部分,它允许我们为自定义数据类型提供直观的操作符行为,从而提升代码的可读性和表达力。