运算符重载学习笔记

运算符重载学习笔记

1. 首先来复习一下类的定义与使用

定义一个复数类Complex,使之能用于复数的加法运算。编写程序,求两复试之和。

//complex.h
#ifndef COMPLEX_H_
#define COMPLEX_H_
class Complex
{
private:
    float re;
    float im;
public:
    Complex();//默认构造函数
    Complex(float r,float i=0);
    Complex Sum(const Complex &z)const;//Sum函数不修改对象数据成员,定义为常函数。按值传递Complex对象,功能相同,但传递引用速度更快。
    void Show()const;
};
#endif
//complex.cpp
#include <iostream>
#include "complex.h"
Complex::Complex(){}
Complex::Complex(float r,float i):re(r),im(i){}
Complex Complex::Sum(const Complex z)const
{
    Complex sum;
    sum.re=re+z.re;//这里的re即this->re,哪个对象调用Sum函数就指向哪个对象,此例中相当于z1.re
    sum.im=im+z.im;
    return sum;
}
void Complex::Show()const{std::cout<<re<<"+"<<im<<"i"<<' ';}
//usecomplex.cpp
//complie complex.cpp and usecomplex.cpp together
#include <iostream>
#include "complex.h"

int main()
{
    using std::cout;
    using std::endl;
    Complex z1(1,2);
    Complex z2(3,4);
    Complex total;
    total=z1.Sum(z2);
    z1.Show();
    cout<<"+"<<' ';
    z2.Show();
    cout<<"="<<' ';
    total.Show();
    cout<<endl;
    return 0;
}

2.将Complex类转换为重载的加法运算符

只要将Sum()的名称改为operator+()即可
调用时可以像调用Sum()那样:
total=z1.sum(z2);
也可以使用运算符表示法:
total=z1+z2;
此时运算符函数为类的成员函数

3.将运算符函数重载为类的友元函数

友元函数知识点复习:
1. 原型在类声明中声明,但它不是成员函数,不能用成员运算符调用
2. 虽然不是成员函数,但与成员函数访问权限相同
声明friend Complex operator+(float r,float i);
定义(不用写friend)Complex operator+(float r,float i){}

修改程序如下:

Complex operator+(const Complex &z01,const Complex &z02)
{
    Complex sum;
    sum.re=z01.re+z02.re;
    sum.im=z01.im+z02.im;
    return sum;
}

4.将运算符函数重载为非成员、非友元的普通函数。

重载为普通函数,就无法访问private数据成员。
那么就在public中增加set_re(),set_im(),get_re()和get_im()函数。
代码如下:

//complex.h
#ifndef COMPLEX_H_
#define COMPLEX_H_
class Complex
{
private:
    float re;
    float im;
public:
    Complex();
    Complex(float r,float i=0);
    void set_re(float r);
    void set_im(float i);
    float get_re()const;
    float get_im()const;
    void Show()const;
};

Complex operator+(const Complex &z01,const Complex &z02);//声明返回Component类的对象的普通函数

#endif
//complex.cpp
#include <iostream>
#include "complex.h"
Complex::Complex(){}
Complex::Complex(float r,float i):re(r),im(i){}
void Complex::set_re(float r){re=r;}
void Complex::set_im(float i){im=i;}
float Complex::get_re()const{return re;}
float Complex::get_im()const{return im;}
void Complex::Show()const{std::cout<<re<<"+"<<im<<"i"<<' ';}

Complex operator+(const Complex &z01,const Complex &z02)
{
    Complex sum;
    float R=0,I=0;
    R=z01.get_re()+z02.get_im();
    I=z01.get_im()+z02.get_im();
    sum.set_re(R);
    sum.set_im(I);
    return sum;
}
//usecomplex.cpp
//complie complex.cpp and usecomplex.cpp together
#include <iostream>
#include "complex.h"
int main()
{
    using std::cout;
    using std::endl;
    Complex z1(1,2);
    Complex z2(3,4);
    Complex total;

    total=z1+z2;
    z1.Show();
    cout<<"+"<<' ';
    z2.Show();
    cout<<"="<<' ';
    total.Show();
    cout<<endl;
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值