C++运算符重载:友元函数解析

需积分: 43 5 下载量 71 浏览量 更新于2024-08-19 收藏 8.66MB PPT 举报
"运算符重载为友元函数-C++程序设计(谭浩强版)ppt" C++中的运算符重载是一项重要的特性,允许我们为已存在的运算符赋予新的含义,以便在自定义类型上使用。运算符重载通常有两种方式:作为成员函数和作为友元函数。 1. 运算符重载为成员函数 当运算符被重载为成员函数时,通常由一个操作数的对象调用该成员函数,处理另一个操作数。例如,在描述中提到的`a + b`表达式,实际上会转化为`a.operator+(b)`。这意味着`+`运算符的重载版本是`a`对象的一个成员函数,它接受`b`作为参数。同样,前缀递增运算符`++`在成员函数重载中表示为`a.operator++()`,后缀递增则是`a.operator++(void)`,通常用于返回旧值。 2. 运算符重载为友元函数 运算符重载也可以选择作为友元函数实现,这种方式下,函数不是类的成员,而是与类关联的朋友,可以直接访问类的私有和保护成员。这样做的好处是,可以在不破坏封装性的同时,为运算符提供更直观的实现。例如,对于`a + b`,友元函数版本可能如下: ```cpp class MyClass { public: friend MyClass operator+(const MyClass& lhs, const MyClass& rhs); }; MyClass operator+(const MyClass& lhs, const MyClass& rhs) { // 实现加法逻辑 } ``` 这样的重载允许两个对象(`lhs`和`rhs`)作为参数传递给友元函数,而不是只有一个对象调用成员函数。 3. `+=`运算符重载 描述中提到了`c += a;`实际上等同于`c.operator+=(a);`,这是复合赋值运算符的重载形式。复合赋值运算符会将右边的操作数与当前对象相运算,然后将结果赋值回当前对象。这通常比分开写赋值和运算更加高效和简洁。 C++语言概述: C++是在C语言的基础上发展起来的,它继承了C语言的很多特点,同时引入了面向对象编程的概念,使得程序设计更加灵活和强大。C++的发展历程反映了程序设计语言的进化,从早期的BCPL和B语言,到后来的C语言,再到现在的C++。 C语言的特点: - 结构化:C语言采用模块化和结构化编程,便于管理和维护大型程序。 - 高级与低级语言的结合:C语言支持丰富的运算符,包括算术、逻辑和位运算,提供了高级语言的抽象和汇编语言的直接控制能力。 - 可移植性:C语言编写的程序可以在不同的计算机平台上运行,只需少量或无需修改。 - 语法自由度:虽然C语言的语法较为宽松,这给了程序员很大的自由度,但也增加了学习和调试的难度。 对于C++的初学者来说,理解和掌握运算符重载,特别是作为友元函数的重载,是提升编程能力的关键步骤之一。在实际编程中,理解并正确使用这些概念能够提高代码的可读性和效率,是成为一名专业C++程序员的基础。