c++运算符重载

运算符重载

同类:对象1 运算符 对象2——c1 + c2

调用运算符重载方法计算

基本使用

#include <iostream>

class ComplexNumber {
private:
    double real;
    double imaginary;

public:
    ComplexNumber(double r, double i) : real(r), imaginary(i) {}

    // 运算符重载,实现复数对象的相加操作
    ComplexNumber operator+(const ComplexNumber& other) {
        double newReal = real + other.real;
        double newImaginary = imaginary + other.imaginary;
        return ComplexNumber(newReal, newImaginary);
    }

    // 输出复数对象的内容
    void display() {
        std::cout << real << " + " << imaginary << "i" << std::endl;
    }
};

int main() {
    ComplexNumber num1(3.0, 2.0);
    ComplexNumber num2(1.5, 4.5);

    ComplexNumber sum = num1 + num2; // 使用运算符重载执行相加操作

    std::cout << "Sum of complex numbers: ";
    sum.display();

    return 0;
}

流式输出的本质

运算符重载

<<的运算符重载函数

类似于Java类的tostring方法

ostream& operator<<(ostream& out,Test &t){
	out<<t.v<<endl;
	return out;
}
可以被重载的运算符

在C++中,可以通过运算符重载来改变内置数据类型或自定义类对象之间的操作行为。以下是一些可以被重载的运算符:

  1. 算术运算符:可以重载加法、减法、乘法、除法等算术运算符。

    • +:重载为对象相加。
    • -:重载为对象相减。
    • *:重载为对象相乘。
    • /:重载为对象相除。
    • %:重载为对象相模除。
  2. 关系运算符:可以重载关系运算符,如等于、不等于、大于、小于等。

    • ==:重载为对象相等比较。
    • !=:重载为对象不等比较。
    • <:重载为对象小于比较。
    • >:重载为对象大于比较。
    • <=:重载为对象小于等于比较。
    • >=:重载为对象大于等于比较。
  3. 赋值运算符:可以重载赋值运算符(=),使其能够用于自定义类对象。

  4. 自增和自减运算符:可以重载前缀(++--)和后缀(++--)自增和自减运算符。

  5. 位运算符:可以重载按位与(&)、按位或(|)、按位异或(^)等位运算符。

  6. 逻辑运算符:可以重载逻辑与(&&)、逻辑或(||)等逻辑运算符。

  7. 下标运算符:可以重载方括号运算符[],以便类对象可以像数组一样使用。

  8. 函数调用运算符:可以重载圆括号运算符(),使对象可以像函数一样被调用。

  9. 成员访问运算符:可以重载成员访问运算符(->)和成员选择运算符(.),以改变类对象的成员访问行为。

  10. 类型转换运算符:可以重载类型转换运算符,例如将对象转换为其他类型。

  11. 流插入和流提取运算符:可以重载 <<>> 运算符,以支持自定义对象的输入和输出。

  12. 新的和删除的运算符:可以重载 newdelete 运算符,以自定义内存管理行为。

示例项目:

计算 平面坐标两点间的距离。
1),要求使用操作符重载的方法 (重载 “-” 算术运算符)

#include <iostream>
#include <cmath> // 包含 sqrt 函数的头文件

class CPerson {
private:
    double x;
    double y;

public:
    CPerson(double xVal, double yVal) : x(xVal), y(yVal) {}

    // 计算与另一个对象的距离
    double operator-(const CPerson& other) const {
        return sqrt((this->x - other.x) * (this->x - other.x) + (this->y - other.y) * (this->y - other.y));
    }
};

int main() {
    CPerson person1(1.0, 2.0);
    CPerson person2(4.0, 6.0);

    double distance = person1 - person2; // 使用重载的减法运算符计算距离

    std::cout << "Distance between persons: " << distance << std::endl;

    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值