简介C++编程中的运算符重载

 更新时间:2015年09月18日 15:43:06   投稿:goldensun  
这篇文章简单介绍了C++编程中的运算符重载,是C++入门学习中的基础知识,需要的朋友可以参考下

所谓重载,就是重新赋予新的含义。函数重载就是对一个已有的函数赋予新的含义,使之实现新功能,因此,一个函数名就可以用来代表不同功能的函数,也就是”一名多用”。

运算符也可以重载。实际上,我们已经在不知不觉之中使用了运算符重载。例如,大 家都已习惯于用加法运算符”+”对整数、单精度数和双精度数进行加法运算,如5+8, 5.8 +3.67等,其实计算机对整数、单精度数和双精度数的加法操作过程是很不相同的, 但由于C++已经对运算符”+”进行了重载,所以就能适用于int, float, doUble类型的运算。

又如”<<“是C++的位运算中的位移运算符(左移),但在输出操作中又是与流对 象cout 配合使用的流插入运算符,”>>“也是位移运算符(右移),但在输入操作中又是与流对象 cin 配合使用的流提取运算符。这就是运算符重载(operator overloading)。C++系统对”<<“和”>>“进行了重载,用户在不同的场合下使用它们时,作用是不同 的。对”<<“和”>>“的重载处理是放在头文件stream中的。因此,如果要在程序中用”<<“和”>>”作流插入运算符和流提取运算符,必须在本文件模块中包含头文件stream(当然还应当包括”using namespace std“)。

现在要讨论的问题是:用户能否根据自己的需要对C++已提供的运算符进行重载,赋予它们新的含义,使之一名多用。譬如,能否用”+”号进行两个复数的相加。在C++中不能在程序中直接用运算符”+”对复数进行相加运算。用户必须自己设法实现复数相加。例如用户可以通过定义一个专门的函数来实现复数相加。

[例] 通过函数来实现复数相加。

#include <iostream>
using namespace std;
class Complex //定义Complex类
{
public:
  Complex( ){real=0;imag=0;}  //定义构造函数
  Complex(double r,double i){real=r;imag=i;} //构造函数重载
  Complex complex_add(Complex &c2); //声明复数相加函数
  void display( ); //声明输出函数
private:
  double real; //实部
  double imag; //虚部
};
Complex Complex::complex_add(Complex &c2)
{
  Complex c;
  c.real=real+c2.real;
  c.imag=imag+c2.imag;
  return c;
}
void Complex::display( ) //定义输出函数
{
  cout<<"("<<real<<","<<imag<<"i)"<<endl;
}
int main( )
{
  Complex c1(3,4),c2(5,-10),c3;//定义3个复数对象
  c3=c1.complex_add(c2); //调用复数相加函数
  cout<<"c1="; c1.display( );//输出c1的值
  cout<<"c2="; c2.display( );//输出c2的值
  cout<<"c1+c2="; c3.display( );//输出c3的值
  return 0;
}

运行结果如下:

c1=(3+4i)
c2=(5-10i)
c1+c2=(8,-6i)

结果无疑是正确的,但调用方式不直观、太烦琐,使人感到很不方便。能否也和整数的加法运算一样,直接用加号”+”来实现复数运算呢?如

  c3=c1+c2;


编译系统就会自动完成c1和c2两个复数相加的运算。如果能做到,就为对象的运算提供了很大的方便。这就需要对运算符”+“进行重载。

相关文章

  • 使用C++中string实现任意长度的正小数、整数之间加减法方法实例

    使用C++中string实现任意长度的正小数、整数之间加减法方法实例

    这篇文章主要介绍了利用C++中string函数实现任意长度的正小数、整数之间加减法方法实例,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面跟着小编一起来学习学习吧。
    2017-06-06
  • C++ lambda函数详解

    C++ lambda函数详解

    小编可以明确告诉大家:lambda函数是C++11中最重要的,使用最广泛的,最具现代风格的内容,lambda函数的出现改变了C++编程的思维方式。所以快和小编学习一下C++11中lambda函数的使用吧
    2023-02-02
  • 一篇文章带你了解C++模板编程详解

    一篇文章带你了解C++模板编程详解

    这篇文章主要介绍了C++的模板,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-11-11
  • C语言栈之顺序栈

    C语言栈之顺序栈

    这篇文章主要为大家详细介绍了C语言的顺序栈,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • 一文详解C++11中auto的使用

    一文详解C++11中auto的使用

    这篇文章主要为大家分享一下C++11中auto关键字的使用示例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2023-07-07
  • C++类和对象深入探索之分文件编写点和圆的关系详解

    C++类和对象深入探索之分文件编写点和圆的关系详解

    先前把C++类和对象的封装讲完了,并且留下了一个判断两个立方体是否相等的案例,但是那么多知识点,仅仅一个案例是不够的,所以再来一个分文件编写点圆关系的案例;创建圆类和点类,圆类包含点类,算是一个嵌套吧,顺便复习一下分文件编写的方法,开整
    2022-05-05
  • C++基于EasyX框架实现飞机大战小游戏

    C++基于EasyX框架实现飞机大战小游戏

    EasyX是针对C/C++的图形库,可以帮助使用C/C++语言的程序员快速上手图形和游戏编程。本文将利用EasyX框架实现飞机大战小游戏,需要的可以参考一下
    2023-01-01
  • C++的静态联编和动态联编详解

    C++的静态联编和动态联编详解

    这篇文章主要介绍了C++的静态联编和动态联编详解,对于深入理解C++编译运行原理有很大帮助,需要的朋友可以参考下
    2014-07-07
  • C++中常量与指针的示例详解

    C++中常量与指针的示例详解

    在C++学习使用过程中,每个人都不可避免地使用指针,而且都或多或少的接触过常量指针或指针常量,但是对这两个的概念还是很容易搞糊涂的,所以这篇文章主要给大家介绍了关于C++中常量与指针的相关资料,需要的朋友可以参考下
    2021-06-06
  • C++实现单例模式的自动释放

    C++实现单例模式的自动释放

    这篇文章主要为大家详细介绍了C++实现单例模式的自动释放,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06

最新评论