为什么在C++中需要进行运算符重载呢?

[复制链接]

1234

主题

-8

回帖

216

积分

游客

积分
216
a420995601 发表于 2018-12-21 02:08:58 | 显示全部楼层 |阅读模式
  本文主要讲述运算符的重载,它也与友元有部分的关联。为什么在C++中需要进行运算符重载呢?主要有下面几个原因:
  (1) 对于标准类型的数据,如int, double都可以进行加、减、乘、除、大于、小于比较等运算,这是很直观的。而C++的类对象默认是没有这些功能的。如果要实现类对象的这些运算,可以自己定义成员函数,通过函数调用的方式来实现,如obj1.Add(obj2)这种方式不直观,而如果能实现obj1 = obj1 - obj2; 这与标准类型的数据计算方式是一样的,而这是我们最容易接受的,因为很熟悉,所以一看便知。所以,在C++中,运算符重载允许把一些标准的运算符(加、减、乘、除、大于、小于比较等运算)应用于自定义类型的类对象中。
  (2) 程序员阅读程序时,直观,自然,提高可读性。
  (3) 此外,可以体现C++的可扩充性。 运算符重载虽然有好处,但是也需要注意一些要点:
  (1) 运算符重载只是语法上的方便,它只是另一种函数调用的方式
  (2) 运算符重载的本质还是函数重载 捕鱼游戏 星力捕鱼
  (3) 不要滥用重载,只有在涉及的代码更容易写,尤其是更易读时才有必要重载。 运算符重载的实现方式有2种:成员函数重载和非成员函数重载(友元函数重载), 成员函数重载的原型: 函数类型 operator运算符(参数表) 成员函数定义的格式:函数类型 类名::operator运算符(参数表){函数体;} 非成员函数重载的原型:friend 函数类型 operator运算符(参数表) 非成员函数定义的原型:函数类型 operator运算符(参数表){函数体;}
  下面举一个复数类complex重载的例子: #ifndef _COMPLEX_H #define _COMPLEX_H class complex { public: complex(int real, int imag):real_(real),imag_(imag){} complex(); ~complex(); complex& Add(const complex& other); void Display() const; complex operator+(const complex& other); //成员函数重载 friend complex operator+(const complex& c1, const complex& c2); //友元函数重载 private: int real_; //复数的实部 int imag_; //虚部 }; #endif
  下面是类的具体实现: #include #include "complex.h" using namespace std; complex::complex(){cout << "complex..."<除外)。
  (6) 流类型转换运算符只能以成员函数方式重载
  (7) 流运算符只能以友元的方式重载 ---------------------

你喜欢看
  • python如何操作Sql Server 2008

      python如何操作Sql Server 2008   最近由于公司的一个项目需要,需要使用Sql Server 2008数据库,开 ...

  • linux内核如何管理进程

      linux内核如何管理进程   “进程”有诸多的定义,在许多的教材资料上,其定义是一个程序的执行实例, ...