北大 C++ 4.1 运算符重载

运算符重载
 
C++预定义了表示对数据的运算
+,-,*,/,^,&,~,!,|,=,<<,>>,!=,==
只能用于 基本的数据类型
       整型,实型,字符型,逻辑型……
C++提供了数据抽象的手段:
       用户自己定义数据类型 –类
              ·调用累的成员函数 à操作它的对象
类的成员函数 à操作对象时,很不方便
       ·在数学上两个复数可以直接进行+/-等运算
Vs. 在C++,直接将+,-用于复数是不行的。
 
于是我们需要使用运算符重载
目的:
       对抽象数据类型也能够直接使用C++提供的 运算符
              程序更简洁
              代码更容易理解
例1:
complex_a和complex_b是两个复数对象,我们希望直接complex_a + complex_b.
 
运算符重载
       ·对已有的运算符赋予多重的含义
       使同一运算符作用于不同类型的数据时 à不同类型的行为
目的
       扩展C++中提供的运算符的适用范围,以用于类所表示的抽象数据类型
运算符重载的实质是函数重载
返回值类型 operator 运算符(形参表)
{
……
}
在程序编译的时候:
       把含 运算符的表达式 à运算符函数的调用
       把运算符的操作数 à运算符函数的 参数
       运算符被多次重载是,根据 实参的类型决定调用哪个运算符函数,个数呢? 个数不用考虑,因为个数都一样。
       运算符可以被重载成 普通函数
       也可以被重载成 类的成员函数
 
1)运算符可以被重载成 普通函数
 
 
class Complex {
       public:
              Complex(double r= 0.0, double i = 0.0){
                     real = r;
                     imaginary = i;
}
double real;
double imaginary;
};
 
Complex operator+(const Complex &a,const Complex &b){
       return Complex(a.real+b.real,a.imaginary+b.imaginary);
}
 
Complex a(1,2),b(2,3),c;
c = a + b; //也可以写成 c = operator+(a,b);
重载为普通函数时,参数个数为运算符目数。
 
 
2)运算符重载为 成员函数
此时a+b其实是a.operator+(b);所以重载为成员函数时,参数个数为运算符目数减一
#include <iostream>
using namespace std;
 
class Complex {
public :
    Complex( double r = 0.0, double m = 0.0) :real( r ), imaginary( m ) {  } //constructor
    Complex operator+ ( const Complex &);
    Complex operator- ( const Complex &);
public :
    double real;
    double imaginary;
};
 
Complex Complex :: operator+ ( const Complex & operand2 ) {
    return Complex (real + operand2 .real, imaginary + operand2 .imaginary);
}
 
Complex Complex :: operator- ( const Complex & operand2 ) {
    return Complex (real - operand2 .real, imaginary - operand2 .imaginary);
}
 
int main() {
    Complex x, y(4.3, 8.2), z(3.3, 1.1);
    x = y + z;  //x = y.operator+(z);
    cout << x.real << endl;
    x = y - z;  //x=  y.operator-(z);
    cout << x.real << endl;
    system( "pause" );
    return 0;
}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值