C++-操作符重载、并实现复数类详解

本文详细介绍了C++中的操作符重载,包括其原理、定义方式及注意事项,并通过实例展示了如何利用操作符重载创建复数类,实现加减乘除、比较和赋值等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先回忆下以前学的函数重载

函数重载

  1. 函数重载的本质为相互独立的不同函数
  2. 通过函数名和函数参数来确定函数调用
  3. 无法直接通过函数名得到重载函数的入口地址
  4. 函数重载必然发生在同一个作用域中

类中的函数重载

  1. 静态成员函数能与普通成员函数建立重载关系
  2. 全局函数和成员函数不能构成重载关系

操作符重载(operator)

什么是操作符重载?

大家都知道,在C里,有'+,-,*,/'这些操作符,且它们的功能就是实现普通变量运算。

由于C++是面向对象的,遇到的变量大多都是对象,所以优化了C里的操作符,使它们拥有了重载能力.能通过一定方式,使对象能进行'+,-,*,/'等运算.

操作符的重载是以函数的方式进行.

操作符重载定义

操作符重载,通过operator关键字在函数前定义:

?

1

2

3

4

5

6

7

[返回类型] operator [需要重载的操作符](函数参数)

  

{

  

    //......

  

}

作符重载有几种方式 : 全局操作符重载函数、全局操作符重载函数

编译器首先会判断运算的若是对象,就会先从类里寻找成员操作符重载函数,若没找到,就会再去全局里寻找全局操作符重载函数.

注意事项:

  1. 操作符重载不能改变原操作符的优先级
  2. 操作符重载不能改变操作数的个数
  3. 操作符重载的参数一般设为const class_name &类型(若只设为const class_name,会产生临时对象)
  4. 在C++中,有些操作符必须需要有对象支持,所以只能为成员函数.这种被称为一元操作符

比如赋值(=)、下标([])、下标([])、调用(())和成员访问箭头(->):

?

1

Test t3=t2;  //相当于调用了: Test t3.operator =(t2); 里面会通过this指针来代替左侧数t3

有些操作符既可以当做成员操作符重载函数,也可以当做全局操作符重载函数,由于函数参数可以多个,便称为二元操作符
比如加法(+),与(&&),或(||),逗号(,)等:

以加法(+)为例,当设为全局操作符重载函数时,执行

?

1

Test t3=t1+t2; //相当于调用了: Test t3 = operator +(t1,t2);

以加法(+)为例,当设为成员操作符重载函数时,执行

?

1

Test t3=t1+t2; //相当于调用了: Test t3 =t1.operator +(t2); //里面会通过this指针来代替左侧数t1

多个重载的操作符重载函数

由于操作符重载函数带参数,所以可以存在多个相同的操作符重载函数

例如:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

class Test

{

  

double x;

  

double y;

  

public:

  

Test operator +(const Test& t);        //实现Test t3=t1+t2

  

Test operator +(int i);            //实现Test t3=t1+1

  

Test operator +(double d);           //实现Test t3=t1+1.25

  

//... ...

  

};

初步试验

1.接下来,来个全局操作符重载函数例子:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值