首页 > 编程语言 >C++_20_操作符重载和函数重载 - 重写版

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

时间:2023-11-05 23:24:10浏览次数:38  
标签:20 函数 C++ 运算符 操作符 重载 按位 赋值

操作符(运算符)重载

   操作符重载指的是将 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;
}

 

标签:20,函数,C++,运算符,操作符,重载,按位,赋值
From: https://www.cnblogs.com/zlxxc/p/17811524.html

相关文章

  • C++_19_虚函数、纯虚函数和抽象类 - 重写版
    虚(成员)函数:在C++中,只有类中的成员函数能被声明为虚函数,顶层函数则不能被声明为虚函数;并且如果在类内声明类外定义,则只在类内声明时加virtual声明虚函数是为了构成多态,多态需要继承关系,需要在类中声明;虚函数能被继承:基类被声明为虚函数,那么派生类即便未添......
  • C++_25_函数模板和类模板 - 重写版
    模板:在C++中允许函数重载,但函数重载每次都必须完全对上参数的顺序,类型和数量。所以C++提供了另一种代码重用机制——“模板”,可以作为同一种类型函数的统一调用接口。模板机制下可划分:1、函数模板      2、类模板模板的语......
  • C++_28_空指针、野指针、智能指针 - 重写版
     野指针:没有明确执向的指针,可能会胡乱指向任意一个变量;编程的时候绝不允许出现野指针;int*p;//错误,未初始化指向一块地址,会变成野指针如果确实需要先不指定到需要使用的内存,那就先定义一个空指针;-------》宁愿指向为空也不要为野;因为野指针你把握不住; 空指针:让指针指向N......
  • 2023-2024-1 20231304 《计算机基础与程序设计》第六周学习总结
    2023-2024-120231304《计算机基础与程序设计》第六周学习总结作业信息这个作业属于哪个课程2023-2024-1-计算机基础与程序设计这个作业要求在哪里2023-2024-1计算机基础与程序设计第六周作业这个作业的目标作业正文2023-2024-120231304《计算机基础与程......
  • 【专题】2023年中国手术机器人行业专题报告PDF合集分享(附原数据表)
    原文链接:https://tecdat.cn/?p=34144原文出处:拓端数据部落公众号仿生机器人作为一类结合了仿生学原理的机器人,具备自主决策和规划行动的能力,正逐渐进入大众视野。它们的核心技术要素包括感知与认知技术、运动与控制技术、人机交互技术和自主决策技术。阅读原文,获取专题报告合集......
  • C++_02_命名空间和作用域运算符 - 重写版
    命名空间在C++中命名空间(namespace)的作用:命名空间,就是为了解决同一个源代码中相同命名的变量或者函数之间相互冲突的问题,就是要避免这种冲突,让程序代码中可以多次使用同一个标识符而存在的。对于一名开发者而言,代码量过于庞大,或多或少会忘记之间之前用过的变量名或函......
  • 2023-2024-1 20231319 《计算机基础与程序设计》第六周学习总结
    2023-2024-120231319邓传山《计算机基础与程序设计》第四周学习总结作业信息这个作业属于哪个课程[2023-2024-1-计算机基础与程序设计](https://edu.cnblogs.com/campus/besti/2023-2024-1-CFAP/homework/12999)这个作业要求在哪里[作业要求](https://www.cnblo......
  • C++_01_初步认识C++语言 - 重写版
    一、认识“C++语言”一、首先聊聊什么是语言?语言是一套具有“语法”、“词法”规律的系统,是思维的工具。计算程序设计语言是计算机可以识别的语言,用于描述解决问题的方法,供计算机阅读和执行。语言由低级到高级依次分为4类:1、机器语言     (由......
  • 2023/11/5 <div>标签的介绍
    <div>标签是用来为HTML文档的内容提供结构和背景的元素。<div>开始标签和</div>结束标签之间的所有内容都是用来构成这个快的,其中所包含标签的特性由<div>标签中的属性来控制,或者通过使用样式表格式化这个表来进行控制。 div全称division,意为分割.<div>标签被称为分割标签,表示......
  • test20231103
    T1还算是一道简单题,通过二分可以轻松求解。(但是我因为没有判断左端点挂了\(10pts\),不然我就是本场比赛的\(rk1\)了)虽然题解上说单调性是错误的,但是而二分能过,那就二分水过去吧。intn,k;inta[2050];boolvis[2050];inlineintwork(intx){memset(vis,0,sizeof......