咱们一起学C++ 第一百五十九篇:之深入理解C++一元运算符重载的细节与应用

咱们一起学C++ 第一百五十九篇:之深入理解C++一元运算符重载的细节与应用

大家好!学习C++就像一场充满挑战的冒险,每一个新的知识点都是旅途中的宝藏。我希望通过这个系列博客,和大家一起探索C++的奥秘,共同进步。上一篇我们初步了解了C++运算符重载的一些规则和一元运算符重载的概念,今天咱们进一步深入学习一元运算符重载的细节,看看它在实际编程中到底有哪些门道。

一、回顾运算符重载的基本规则

在深入探讨一元运算符重载之前,咱们先来回顾一下运算符重载的基本规则。运算符重载虽然强大,但不能随意乱来。我们不能使用C++里不存在的运算符,比如想用**表示乘方就不行;也不能改变运算符的优先级,像乘法永远比加法先计算这个规则是不能改的;还有运算符的参数个数也固定,一元运算符只能有一个参数,二元运算符就两个参数,这些规则都是为了保证代码的清晰和可读性。

二、一元运算符重载的实现方式

一元运算符重载有两种常见的实现方式,分别是通过成员函数和全局函数(通常是友元函数)来实现。接下来,我们通过自定义的类来详细看看这两种方式。

(一)成员函数实现一元运算符重载

我们定义一个Counter类,用来模拟一个计数器,通过重载一元运算符来实现对计数器的各种操作。

#include 
class Counter {
   
private:
 int count;
public:
 Counter(int c = 0) : count(c) {
   }
 // 重载取正运算符,这里只是为了展示,实际意义不大
 Counter operator+() const {
   
 std::cout << "取正运算符(成员函数)被调用" << std::endl;
 return *this;
 }
 // 重载取负运算符,让计数器的值取反
 Counter operator-() const {
   
 std::cout << "取负运算符(成员函数)被调用" << std::endl;
 return Counter(-count);
 }
 // 重载前置自增运算符
 Counter& operator++() {
   
 std::cout << "前置自增运算符(成员函数)被调用" << std::endl;
 ++count;
 return *this;
 }
 // 重载后置自增运算符
 Counter operator++(int) {
   
 std::cout << "后置自增运算符(成员函数)被调用" << std::endl;
 Counter temp = *this

你可能感兴趣的:(咱们一起学习C++,c++,java,算法)