• C++ 重载运算符,语法+示例,非常详细!!!


    定义与说明

    运算符重载是一种特殊的函数重载,即把运算符当做函数名进行重载

    运算符重载是对已有的运算符使用范围进行扩展,使运算符在保持原功能的情况下,可以对更多的数据类型操作起作用

    例如:一个Date类,声明a,b两个对象,执行 a - b 会报错,但是重载 “-”后就能实现对象的相减

    为什么要对运算符重载

    C++预定义中的运算符的作用对象只局限于那些基本数据类型,如int + int ,int + float 等等

    语法

    返回值类型  operator运算符名称(形参列表)
    {
    	函数体
    }
    
    • 1
    • 2
    • 3
    • 4

    规定

    1. 不允许用户自己定义新的运算符
    2. 运算符重载不应该改变运算符被公认的功能。如把 “+”重载成减法功能
    3. 重载不能改变运算符操作数的个数。双目运算符需要两个参数,重载后仍需要两个参数
    4. 重载不能改变运算符的优先级。只能通过"()"强制改变
    5. 重载不能改变结合性。如*,/都是左结合性,不能重载成右结合性
    6. 运算符重载函数一般声明为类的成员函数,也可以声明为全局函数,若为全局函数,要访问类的private成员,则要声明为类的友元
    7. 运算符重载函数的参数要至少有一个是类的对象或类的引用。如:类名 operator+(类名 引用对象)

    举例 重载“+”

    重载 “+” 实现对象的相加

    #include
    #include
    #include
    using namespace std;
    class Complex {
    	private:
    		double m_real;
    		double m_image;
    	public:
    		Complex():m_image(0.0),m_real(0.0) {		//重载之前要对成员变量赋初值
    		}
    		Complex(double real,double image) {
    			m_real = real;
    			m_image = image;
    		}
    		Complex operator+(Complex &A) {		//重载
    			Complex B;
    			B.m_image = this -> m_image + A.m_image;    //1
    			B.m_real = this -> m_real + A.m_real;		//2
    			return B;
    		}
    	//还可以写成更简单的形式(去掉 1 , 2):
    		  //return Complex(this -> m_image + A.m_image,this -> m_real + A.m_real);
    		
    		void Disp() const {
    			cout<
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    11

    过程:执行时,编译器检测到 “+”号(+ 具有左结合性)左边是一个Complex对象,就会调用成员函数operator+(),也就是c1+c2,实质上是 “c1.operator+(c2);” 这是标准的函数调用形式。 (c1是要调用的函数的对象,c2是函数的实参,operator+ 是函数名)

    #include
    #include
    #include
    using namespace std;
    class Complex {
    	private:
    		double m_real;
    		double m_image;
    	public:
    		Complex():m_image(0.0),m_real(0.0) {
    		}
    		Complex(double real,double image) {
    			m_real = real;
    			m_image = image;
    		}
    							
    		friend Complex operator+(Complex &A , Complex &B) {		//重载
    			return Complex(A.m_image + B.m_image,A.m_real + B.m_real);
    		}
    		void Disp() const {
    			cout<
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    可以重载的运算符

    双目算术运算符+,-,*,/,%
    关系运算符==,!=,<,>,<=,>=
    逻辑运算符!,||,&&
    单目运算符+,-,*(指针),&
    自增自减运算符++,–
    位运算符|,&,~,^,<<,>>
    赋值运算符=,+=,-=,*=,/=,%=,&=,|=,^=,<<=,>>=
    空间申请与释放new, delete ,new[] ,delete[]
    其他运算符()(函数调用),->(成员访问),->*(成员指针访问),,(逗号),[](下标)

    不可重载的运算符

    成员访问运算符.
    成员指针访问运算符*
    域运算符::
    长度运算符sizeof
    条件运算符?:
  • 相关阅读:
    Docker 中下载各版本的 CentOS、CentOS Steam 方式
    机器学习_PySpark-3.0.3字符标签索引化(StringIndex)实例
    开发平台模块化重构
    安卓离线点击第一条通知跳转正常,第二条失败或者通过URL Scheme唤起App指定页面第一次成功,第二次失败
    国际公认—每个领导者必须拥抱的11项领导力转变
    Golang-RPC(八):rpcx-专注于Go语言的rpc框架,支持服务发现
    我们来聊聊锁升级吧
    【C++ 结构体的构造函数使用】
    设计模式-建造者模式
    统计学习方法P54中位数脚注
  • 原文地址:https://blog.csdn.net/m0_62951223/article/details/126924234