您当前的位置: 首页 >  c++

ZhangJiQun&MXP

暂无认证

  • 3浏览

    0关注

    1187博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

C++运算符重载

ZhangJiQun&MXP 发布时间:2018-11-08 15:47:45 ,浏览量:3

 

 

三目运算符

对于条件表达式 a>b ? x : y,先计算条件b,然后进行判断。如果a>b 的值为true(1),计算x的值,运算结果为x的值;否则,计算y的值,运算结果为y的值。

其中a>b 部分,返回就是0,1,没有其他数;

C++运算符重载

【1】运算符重载的目的:实现类的多态性。

【2】运算符重载的实质:函数重载,每个运算符对应各自的运算符函数,根据操作数的不同调用不同的同名函数。

【3】运算符重载语法:运算符的重载是通过对运算符

       运算符函数名由关键字operate和重载的运算符组成:

              类型类名::operate 重载的运算符(参数列表)

{

       操作://……运算符处理程序代码

}

函数的参数个数是由以下两个因素决定:

该操作符是一元操作符还是二元操作符

当运算符重载为类的成员函数时,函数的参数个数比原有操作数个数要少一个(后置“++”,“--”除外),也就是说,一元操作符的参数个数为0,二元操作符的参数个数为1;而运算符重载为类的友元函数时,函数的参数个数与原有操作数个数相同(后置“++”,“--”除外),也就是说,一元操作符的参数个数为1,二元操作数的参数个数为2。这是因为,当重载为类的成员函数时,如果某个对象使用重载了成员函数,自身的数据可以直接访问,就不用再放在函数表中进行传递,这样该类本身也作为一个操作符参与了计算。

友元函数对某个对象的数据进行操作,就必须通过该对象的名字来进行,因此参数的使用必须进行传递,操作数的个数也就不会有所减少变化。

【4】运算符重载规则:

在C++中,除了5个运算符不能重置(“.”,“*指针”,“::”,“?:”,“sizeof”)之外,其余全部都可以重载。

运算符重载可以改变运算符原来的行为,但是重载之后运算符的优先性,结合性和操作数个数都不会改变,只能重载已有的运算符。

运算符重载后的功能与原有的功能相似,运算符重载函数的参数至少有一个必须是自定义类型。

在重载运算符“()”,“[]”,“->”或“=”时,运算符重载函数必须声明一个为类的一个成员,对于其他运算符,运算符重载函数可以是成员函数或者是友元函数。

【5】成员运算符函数:

eg:  classcomplex

{

              public:

                     complex(floatr=0,float i=0);  // 构造函数

                     complexoperator+(const complex &op2) const;   //重载运算符 +

              complexoperator-(const complex &op2) const;   //重载运算符-

              complexoperator*(const complex &op2) const;   //重载运算符*

              voiddisplay() const;               // 按数学写法输出复数

       private:

              floatreal;

              floatimag;

};

complex::complex(float r,floati)  // 构造函数

{      real=r;   imag=i;        }

complex complex::operator+(const complex &op2) const    //重载运算符 +

{

       float       r=real+op2.real;

       float      i=imag+op2.imag;

       returncomplex(r,i);

}

complex complex::operator-(const complex &op2) const  //重载运算符 -

{

       float       r=real-op2.real;

       float      i=imag-op2.imag;

       returncomplex(r,i);

}

complex complex:: operator*(const complex &op2) const    //重载运算符 *

{

    floatr=real*op2.imag-imag*op2.real;

       floati=imag*op2.real+real*op2.imag;

       returncomplex(r,i);}

 

关注
打赏
1665659684
查看更多评论
立即登录/注册

微信扫码登录

0.0559s