C++_20_操作符重载和函数重载 - 重写版

发布时间 2023-11-05 23:21:50作者: 尘落曦枫

操作符(运算符)重载

   操作符重载指的是将 C++ 提供的操作符进行重新定义或者多重定义,使之满足我们所需要的一些功能。
  在C++中,经常有需要对多个对象进行算术运算,但是对象比不是基本的数据类型,所以这些运算符都无法执行。为了让程序识别这些运算符,就需要对运算符进行重载
  运算符重载也可以简单理解为在基本运算符的基础上自定义出所需要的新的运算符的过程。

  [ ]操作符是下标操作符,( )操作符是函数调用操作符。
  自增自减操作符的前置和后置形式都可以重载。

双目算术运算符 + (加),-(减),*(乘),/(除),% (取模)
关系运算符 ==(等于),!= (不等于),< (小于),> (大于),<=(小于等于),>=(大于等于)
逻辑运算符 ||(逻辑或),&&(逻辑与),!(逻辑非)
单目运算符 + (正),-(负),*(指针),&(取地址)
自增自减运算符 ++(自增),--(自减)
位运算符 | (按位或),& (按位与),~(按位取反),^(按位异或),,<< (左移),>>(右移)
赋值运算符 =, +=, -=, *=, /= , % = , &=, |=, ^=, <<=, >>=
空间申请与释放 new, delete, new[ ] , delete[]
其他运算符 ()(函数调用),->(成员访问),,(逗号),[](下标)


  长度运算符sizeof、条件运算符:?、成员选择符.、成员指针访问运算符.* , ->*和域解析操作符::不能被重载。

语法:关键字 operator

  加法运算符重载
    

    减法-,乘法*,除法/,取余数% 都会用同样的方式重载。
    这一类运算符支持全局函数做重载。

   左移重载运算符
    

    << 标准输出的符号。
    因为<<运算符左侧是cout,而不是需要被输出的对象,所以它不能作为成员函数重载。只能作为全局函数重载。

  赋值运算符
    

    = 赋值符号。
    类的默认拷贝构造函数其实就是赋值运算符的一种重载方式。
    而默认的拷贝构造函数一直是浅拷贝,所以对于需要深拷贝的赋值运算,我们可以通过运算符重载来做赋值。

  自加自减运算符
    

    前缀++,后缀++,前缀--,后缀--

  比较运算符
    

    >  <  >=  <=  ==  !=

  函数运算符重载
    

 

  下标运算符重载
    

    还有很多运算符可以重载,像下标运算符[ ],位或运算符,位与运算符等等。
    但还是有5个运算符无法重载:

      .  对象取成员运算符

      sizeof  获取对象内存大小

      ::  作用域运算符

      .*  成员中取解引用运算符

      ?:  三目运算符

    如果运算符左侧的对象必须是this指针指向的对象,就必须把运算符重载写成成员函数(举例: =赋值运算符),如果运算符左侧的对象必须是当前类无关的对象,就必须把运算符重载写成全局函数(<<左移运算符),其他的两种都可以写。

 

函数重载

  在同一个作用域内,可以声明几个功能类似的同名函数,
    但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同。
  不能仅通过返回类型的不同来重载函数。

函数 print() 被用于输出不同的数据类型

#include <iostream>
using namespace std;
 
class printData
{
   public:
      void print(int i) {
        cout << "整数为: " << i << endl;
      }
 
      void print(double  f) {
        cout << "浮点数为: " << f << endl;
      }
 
      void print(char c[]) {
        cout << "字符串为: " << c << endl;
      }
};
 
int main(void)
{
   printData pd;
 
   // 输出整数
   pd.print(5);
   // 输出浮点数
   pd.print(500.263);
   // 输出字符串
   char c[] = "Hello C++";
   pd.print(c);
 
   return 0;
}