c++运算符重载的简要剖析

一、运算符重载的定义
   C++中预定义的运算符的操作对象只能是基本数据类型。但实际上,对于许多用户自定义类型(例如类),也需要类似的运算操作。这时就必须在C++中重新定义这些运算符,赋予已有运算符新的功能,使它能够用于特定类型执行特定的操作。运算符重载的实质是函数重载,它提供了C++的可扩展性,也是C++最吸引人的特性之一。
二、运算符重载的规则

1)除了类属关系运算符"."、成员指针运算符".*"、作用域运算符"::"、sizeof运算符和三目运算符"?:"以外,C++中的所有运算符都可以重载。

(2)重载运算符限制在C++语言中已有的运算符范围内的允许重载的运算符之中,不能创建新的运算符。

(3)运算符重载实质上是函数重载,因此编译程序对运算符重载的选择,遵循函数重载的选择原则。

(4)重载之后的运算符不能改变运算符的优先级和结合性,也不能改变运算符操作数的个数及语法结构。

(5)运算符重载不能改变该运算符用于内部类型对象的含义。它只能和用户自定义类型的对象一起使用,或者用于用户自定义类型的对象和内部类型的对象混合使用时。

三、运算符重载的格式

运算符函数重载一般有两种形式:重载为类的成员函数和重载为类的非成员函数。非成员函数通常是友元。

1) 成员函数运算符

 运算符重载为类的成员函数的一般格式为:

    <函数类型>operator <运算符>(<参数表>)

    {

     <函数体>

    }

 当运算符重载为类的成员函数时,函数的参数个数比原来的操作数要少一个(后置单目运算符除外),这是因为成员函数用this指针隐式地访问了类的一个对象,它充当了运算符函数最左边的操作数。

(1)双目运算符重载为类的成员函数时,函数只显式说明一个参数,该形参是运算符的右操作数。

(2)前置单目运算符重载为类的成员函数时,不需要显式说明参数,即函数没有形参。

(3)后置单目运算符重载为类的成员函数时,函数要带有一个整型形参。

    调用成员函数运算符的格式如下:

    <对象名>.operator<运算符>(<参数>)

    它等价于

    <对象名><运算符><参数>

 例如a+b等价于a.operator +(b)。一般情况下,我们采用运算符的习惯表达方式。

2) 友元函数运算符

 运算符重载为类的友元函数的一般格式为:

    friend<函数类型> operator<运算符>(<参数表>)

   {

     <函数体>

    }

当运算符重载为类的友元函数时,由于没有隐含的this指针,因此操作数的个数没有变化,所有的操作数都必须通过函数的形参进行传递,函数的参数与操作数自左至右一一对应。

 调用友元函数运算符的格式如下:

    operator<运算符>(<参数1>,<参数2>)

    它等价于

    <参数1><运算符><参数2>

    例如a+b等价于operator +(a,b)

四、运算符重载举例
重载+运算符
#include
using namespace std;
class Complex{
public:
   Complex(doubler=0.0,double i=0.0){
      real=r;
      image=i;
   }
   friend Complexoperator+(const Complex&,const Complex&);
   void display();
private:
   double real;
   double image;
};
 
Complex operator+(const Complex &c1,const Complex&c2){
   returnComplex(c1.real+c2.real,c1.image+c2.image);
}
 
void Complex::display(){
  cout<<"("<<real<<","<<image<<"i)"<<endl;
}
 
int main(){
   Complexc1(3,4),c2(5,-10),c3;
   c3=c1+c2;
  cout<<"c1=";c1.display();
  cout<<"c2=";c2.display();
  cout<<"c1+c2=";c3.display();
   return 0;
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值