C运算符重载PPT课件.pptx
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
### C运算符重载知识点详解 #### 一、运算符重载概述 运算符重载是一种特殊的函数形式,它允许用户重新定义特定类的对象如何使用内置运算符。这对于提高代码的可读性和灵活性非常有帮助。 #### 二、C运算符重载基本概念 在C语言中,并不支持运算符重载,但C++引入了这一特性。这里提到的“C运算符重载”可能是指使用C++风格进行讲解。以下内容基于这一假设进行展开。 #### 三、单目运算符重载 单目运算符通常只有一个操作数。例如,负号 `-` 和增减运算符 `++` 和 `--`。 ##### 1. 负号“-” **成员函数重载:** ```cpp class C { private: double x; public: // ... 构造函数等 C operator-() { C temp; temp.x = -x; return temp; } }; ``` **友元函数重载:** ```cpp class C { private: double x; public: // ... 构造函数等 friend C operator-(const C&); }; C operator-(const C& m) { C temp; temp.x = -m.x; return temp; } ``` **区别:** - 成员函数重载时无需参数,因为当前对象就是操作数。 - 友元函数重载时需要一个参数来表示操作数。 ##### 2. 前置运算符++ **成员函数重载:** ```cpp class C { private: double x; public: // ... 构造函数等 C operator++() { x++; return *this; } }; ``` **友元函数重载:** ```cpp class C { private: double x; public: // ... 构造函数等 friend C operator++(C&); }; C operator++(C& t) { t.x++; return t; } ``` ##### 3. 后置运算符-- **成员函数重载:** ```cpp class C { private: double x; public: // ... 构造函数等 C operator--(int) { x--; return *this; } }; ``` **友元函数重载:** ```cpp class C { private: double x; public: // ... 构造函数等 friend C operator--(C&, int); }; C operator--(C& t, int) { t.x--; return t; } ``` **注意事项:** - 整型参数没有实际意义,仅用于区分前置和后置运算符。 #### 四、双目运算符重载 双目运算符涉及两个操作数,如加法 `+` 和乘法 `*`。 ##### 1. 加号+ **成员函数重载:** ```cpp class C { private: double x; public: // ... 构造函数等 C operator+(const C& m) { C temp; temp.x = x + m.x; return temp; } }; ``` **友元函数重载:** ```cpp class C { private: double x; public: // ... 构造函数等 friend C operator+(const C&, const C&); }; C operator+(const C& m1, const C& m2) { C temp; temp.x = m1.x + m2.x; return temp; } ``` ##### 2. 乘号* **成员函数重载:** ```cpp class C { private: double x; public: // ... 构造函数等 C operator*(const C& m) { C temp; temp.x = x * m.x; return temp; } }; ``` **友元函数重载:** ```cpp class C { private: double x; public: // ... 构造函数等 friend C operator*(const C&, const C&); }; C operator*(const C& m1, const C& m2) { C temp; temp.x = m1.x * m2.x; return temp; } ``` ##### 3. 复合赋值运算符+= **成员函数重载:** ```cpp class C { private: double x; public: // ... 构造函数等 C& operator+=(const C& m) { x += m.x; return *this; } }; ``` **友元函数重载:** ```cpp class C { private: double x; public: // ... 构造函数等 friend C& operator+=(C&, const C&); }; C& operator+=(C& lhs, const C& rhs) { lhs.x += rhs.x; return lhs; } ``` #### 五、示例分析 考虑下面的例子: ```cpp class C { private: double x; public: C() : x(0.0) {} C(double a) : x(a) {} friend C operator--(C t); void show() { std::cout << x << std::endl; } }; C operator--(C t) { t.x--; return t; } void main() { C c(5.6); (--c).show(); // 输出4.6 c.show(); // 输出5.6 } ``` 在这个例子中,我们首先定义了一个简单的类 `C` 并重载了后置递减运算符。通过 `(--)` 操作,我们可以看到类对象 `c` 的值被改变了两次,第一次输出 `4.6` 是因为 `(--)` 先将 `c` 的值减一然后返回修改后的值;第二次输出 `5.6` 表明 `c` 的值在上一步操作后已经变成了 `5.6`。 以上内容覆盖了C运算符重载的基本概念及其具体实现方法。理解这些内容可以帮助开发者更好地使用运算符重载功能,提高代码质量和可维护性。
- 粉丝: 1402
- 资源: 52万+
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助