C++之双目运算符重载

文章目录

运算符重载

cpp 复制代码
#include <iostream>
using namespace std;
class Complex{
private:
    double r;
    double i;
public:
    Complex(double r, double i){
        this->r = r;
        this->i = i;
    }
    void print(void){
        cout << r << " + " << i << "i" << endl;
    }
};
int main(void){
    Complex a(1,2);
    Complex b(3,4);
    a.print();
    b.print();
    int x = 10;
    int y = 20;
    int z = x + y;
    a+b; //想像x+y 实现Complex对象加运算 +运算符新的逻辑功能 要实现+运算符的重载
    return 0;
}

双目运算符重载

  • 双目运算符:有左右两个操作数的操作符 L#R
    • 算术运算:*、/、%、+、-
    • 关系运算:>、>=、<、<=、==、!=
    • 逻辑运算:&&、||
    • 位运算:&、|、^、<< 、>>
    • 赋值与复合赋值:=、+=、-=、*=、/=、%=、&=、|=、^=、<<= 、>>=
    • ... ...
  • 注意:
    • 表达式结果是右值
    • 左右操作数既可以是左值也可以是右值
  • 实现方式:
    • 成员函数形式:L.operator#®
    • 友元函数形式:operator#(L,R)
cpp 复制代码
#include <iostream>
using namespace std;
class Complex{
private:
    double r;
    double i;
public:
    Complex(double r, double i){
        this->r = r;
        this->i = i;
    }
    void print(void){
        cout << r << " + " << i << "i" << endl;
    }
    const Complex operator+(const Complex& c){
        Complex tmp(r+c.r, i+c.i);
        return tmp;
    }
    friend const Complex operator-(const Complex& l , const Complex& r);
};
const Complex operator-(const Complex& l, const Complex& r){
    Complex tmp(l.r - r.r, l.i - r.i);
    return tmp;
}
int main(void){
    Complex a(1,2);
    Complex b(3,4);
    a.print();
    b.print();
    Complex c = a+b;// a.operator+(b);
    c.print();
    Complex d = c - a; // operator-(c, a);
    d.print();
    return 0;
}
  • 对赋值类双目运算符重载时需要注意的事项:
    • 表达式的结果是左值,就是左操作数的自身
    • 左操作数必须是左值,右操作数可以是左值也可以是右值
cpp 复制代码
#include <iostream>
using namespace std;
class Complex{
private:
    double r;
    double i;
public:
    Complex(double r, double i){
        this->r = r;
        this->i = i;
    }
    void print(void){
        cout << r << " + " << i << "i" << endl;
    }
    const Complex operator+(const Complex& c){
        Complex tmp(r+c.r, i+c.i);
        return tmp;
    }
    Complex & operator+=(const Complex &c){
        r = r + c.r;
        i = i + c.i;
        return *this;
    }
    friend const Complex operator-(const Complex& l , const Complex& r);
    friend Complex & operator-=(Complex &L, const Complex &R);
};
const Complex operator-(const Complex& l, const Complex& r){
    Complex tmp(l.r - r.r, l.i - r.i);
    return tmp;
}
Complex & operator-=(Complex &L, const Complex &R){
    L.r -= R.r;
    L.i -= R.i;
    return L;
}
int main(void){
    Complex a(1,2);
    Complex b(3,4);
    a.print();
    b.print();
    Complex c = a+b;// a.operator+(b);
    c.print();
    Complex d = c - a; // operator-(c, a);
    d.print();
    a += b; //a.operator+=(b);
    a.print();
    (a -= b).print();
    return 0;
}
相关推荐
啊啊啊啊啊!!!!6 小时前
【c++】stack和queue的接口使用以及底层实现
开发语言·c++
(Charon)9 小时前
【C++】锁与原子操作(四):自旋锁的完整实现与性能优化
c语言·开发语言·c++
ShineWinsu10 小时前
对于Linux:五种IO模型以及非阻塞IO的详细解析
linux·c++·面试·io·阻塞·非阻塞·fcntl
呜喵王阿尔萨斯11 小时前
extern “C“ in C++
c语言·c++·算法
乐观勇敢坚强的老彭11 小时前
C++信奥静态数组和动态数组
数据结构·c++·算法
gumichef12 小时前
第一章:面向对象核心——类和对象深度讲解
开发语言·c++
ao-weilai12 小时前
C++基础:类和对象
开发语言·c++
郝学胜-神的一滴12 小时前
[简化版 GAMES 104] 现代游戏引擎 04:从0到1构建你的游戏世界
c++·游戏·unity·游戏引擎·软件工程·unreal engine
Bryce学亮12 小时前
FileLine,基于 Qt 6 + QML 构建的跨平台文件传输与即时通讯工具
数据库·c++·人工智能·python·qt·github
旖旎夜光12 小时前
LeetCode 991: 坏了的计算器(贪心算法) —— 题解
数据结构·c++·算法·leetcode·贪心算法