运算符重载的概念

 

1、 运算符重载的概念

      运算符重载是C++的重要组成部分,它可以让程序更加简单易懂,简单的运算符可以使复杂函数的理解更直观。对于普通对象来说可以使用算术运算符让它们参与计算,C++也允许为类的对象构造运算符来实现单目或双目运输,这个特性就叫运算符的重载。其实,任何使用运算符完成的功能,使用普通的函数也能够完成。运算符的重载主要存在两种形式,一种是作为类的友元函数进行使用,另一种则是作为类的成员函数进行使用。运算符的重载的形式为:

返回类型  operator  运算符符号(参数说明)
{     //函数体的内部实现

}

2、 运算符的运算规则

      ①运算符重载函数也是函数,重载的运算符不会改变运算符的优先级、结合型和参数的个数。

      ②重载运算符不能违反语言的语法规则。

      ③赋值运算符除外,重载运算符可由派生类继承下去。

      ④重载运算符不能使用默认参数。

      ⑤运算符=、()、[]和->可作为类成员运算符,不能作为友元运算符。

      ⑥运算符“.”、“::”、“?:”不能重载。

      ⑦友元运算符的参数规则与类成员运算符的参数规则不同,一员运算符必须显示地声明一个参数,二员运算符必须显示地声明两个参数。类成员运算符重载时,参数中隐含了一个this指针。

3、 实例代码
      1)下面是重载函数作为友元函数的形式

#include  < iostream >
using  std::cout;
using  std::endl;
/*********************************************************/
/* 声明复数类
/********************************************************
*/

class  Complex
{
public:
    
//Attribute
    int x;
    
int y;
    
//Operator
    void SetX(int a){x=a;}
    
void SetY(int b){y=b;}

    friend Complex 
operator +(Complex &, Complex &);
    friend Complex 
operator -(Complex &, Complex &);
    friend Complex 
operator *(Complex &, Complex &);
    friend Complex 
operator /(Complex &, Complex &);

    friend Complex 
operator ++(Complex &);//前置方式
    friend Complex operator ++(Complex &int);//后置方式
}
;
//  "+"重载运算符
Complex  operator   + (Complex &  temp1,Complex &  temp2 )
{
    Complex ret;
    ret.x
=temp1.x+temp2.x;
    ret.y
=temp1.y+temp2.y;
    
return ret;
}

//  "-"重载运算符
Complex  operator   - (Complex &  temp1,Complex &  temp2 )
{
    Complex ret;
    ret.x
=temp1.x-temp2.x;
    ret.y
=temp1.y-temp2.y;
    
return ret;
}

//  "*"重载运算符
Complex  operator   * (Complex &  temp1,Complex &  temp2 )
{
    Complex ret;
    ret.x
=temp1.x*temp2.x;
    ret.y
=temp1.y*temp2.y;
    
return ret;
}

//  "/"重载运算符
Complex  operator   / (Complex &  temp1,Complex &  temp2 )
{
    Complex ret;
    ret.x
=temp1.x/temp2.x;
    ret.y
=temp1.y/temp2.y;
    
return ret;
}

//  "++"前置运算符
Complex  operator   ++ (Complex &  temp1)
{
    temp1.x
=temp1.x+1;
    temp1.y
=temp1.y+1;
    
return temp1;
}

//  "++"后置运算符
Complex  operator   ++ (Complex &  temp1, int )
{
    temp1.x
=temp1.x++;
    temp1.y
=temp1.y++;
    
return temp1;
}

// 主函数()
int  main()
{
    Complex Complex1;
    Complex Complex2;
    Complex Ret;

    Complex1.SetX(
30);
    Complex1.SetY(
40);

    Complex2.SetX(
10);
    Complex2.SetY(
20);

    cout
<<"重载加法运算"<<endl;
    Ret
=Complex1+Complex2;
    cout
<<"Ret.x="<<Ret.x<<endl;
    cout
<<"Ret.y="<<Ret.y<<endl;

    cout
<<"重载减法运算"<<endl;
    Ret
=Complex1-Complex2;
    cout
<<"Ret.x="<<Ret.x<<endl;
    cout
<<"Ret.y="<<Ret.y<<endl;

    cout
<<"重载乘法运算"<<endl;
    Ret
=Complex1*Complex2;
    cout
<<"Ret.x="<<Ret.x<<endl;
    cout
<<"Ret.y="<<Ret.y<<endl;

    cout
<<"重载除法运算"<<endl;
    Ret
=Complex1/Complex2;
    cout
<<"Ret.x="<<Ret.x<<endl;
    cout
<<"Ret.y="<<Ret.y<<endl;

    cout
<<"前置++运算"<<endl;
    Ret
=++Complex1;
    cout
<<"Ret.x="<<Ret.x<<endl;
    cout
<<"Ret.y="<<Ret.y<<endl;

    cout
<<"后置++运算"<<endl;
    Ret
=Complex1++;
    cout
<<"Ret.x="<<Ret.x<<endl;
    cout
<<"Ret.y="<<Ret.y<<endl;
    
return 0;
}

      2)下面是重载函数作为成员函数的实例代码:

#include  < iostream >
using  std::cout;
using  std::endl;
/*********************************************************/
/* 声明复数类
/********************************************************
*/

class  Complex
{
public:
    
//Attribute
    int x;
    
int y;
    
//Operator
    void SetX(int a){x=a;}
    
void SetY(int b){y=b;}
    
//成员函数
    Complex operator +(Complex &);
    Complex 
operator -(Complex &);
    Complex 
operator *(Complex &);
    Complex 
operator /(Complex &);
    Complex
& operator ++();//前置方式
    Complex& operator ++(int);//后置方式
}
;
//  "+"重载运算符
Complex Complex:: operator   + (Complex &  temp1)
{
    Complex ret;
    ret.x
=x+temp1.x;
    ret.y
=y+temp1.y;
    
return ret;
}

//  "-"重载运算符
Complex Complex:: operator   - (Complex &  temp1)
{
    Complex ret;
    ret.x
=x-temp1.x;
    ret.y
=y-temp1.y;
    
return ret;
}

//  "*"重载运算符
Complex Complex:: operator   * (Complex &  temp1)
{
    Complex ret;
    ret.x
=x*temp1.x;
    ret.y
=y*temp1.y;
    
return ret;
}

//  "/"重载运算符
Complex Complex:: operator   / (Complex &  temp1)
{
    Complex ret;
    ret.x
=x/temp1.x;
    ret.y
=y/temp1.y;
    
return ret;
}

//  "++"前置运算符
Complex &  Complex:: operator   ++ ()
{
    x
=x+1;
    y
=y+1;
    
return *this;
}

//  "++"后置运算符
Complex &  Complex:: operator   ++ ( int )
{
    x
=x++;
    y
=y++;
    
return *this;
}

// 主函数()
int  main()
{
    Complex Complex1;
    Complex Complex2;
    Complex Ret;

    Complex1.SetX(
30);
    Complex1.SetY(
40);

    Complex2.SetX(
10);
    Complex2.SetY(
20);

    cout
<<"重载加法运算"<<endl;
    Ret
=Complex1+Complex2;
    cout
<<"Ret.x="<<Ret.x<<endl;
    cout
<<"Ret.y="<<Ret.y<<endl;

    cout
<<"重载减法运算"<<endl;
    Ret
=Complex1-Complex2;
    cout
<<"Ret.x="<<Ret.x<<endl;
    cout
<<"Ret.y="<<Ret.y<<endl;

    cout
<<"重载乘法运算"<<endl;
    Ret
=Complex1*Complex2;
    cout
<<"Ret.x="<<Ret.x<<endl;
    cout
<<"Ret.y="<<Ret.y<<endl;

    cout
<<"重载除法运算"<<endl;
    Ret
=Complex1/Complex2;
    cout
<<"Ret.x="<<Ret.x<<endl;
    cout
<<"Ret.y="<<Ret.y<<endl;

    cout
<<"前置++运算"<<endl;
    Ret
=++Complex1;
    cout
<<"Ret.x="<<Ret.x<<endl;
    cout
<<"Ret.y="<<Ret.y<<endl;

    cout
<<"后置++运算"<<endl;
    Ret
=Complex2++;
    cout
<<"Ret.x="<<Ret.x<<endl;
    cout
<<"Ret.y="<<Ret.y<<endl;
    
return 0;
}

输出结果如下图所示:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值