复数类-简单的运算符重载

运算符重载可以使一些现有的运算符实现一些特定的功能。
运算符重载函数的基本格式:
函数类型 operator@(参数列表) //@代表要重载的运算符

常见的单目运算符:++、–、!、~(按位取反)、-(负号)、*、&(取址)、sizeof等

常见的双目运算符:+、-、*、/、%(取余)、<、>、>=、<=、==、!=、<<、>>、&(按位与)、|(按位或)、&&、||、=等。

不允许重载的五种运算符:
1、. (成员访问运算符)
2、*(成员指针访问运算符)
3、::(域运算符)
4、sizeof (长度运算符)
5、?: (条件运算符)

必须把它作为类成员函数的运算符有:( ),[]、->、=。

双目运算符的重载,如在类外边编写函数(不是类的成员函数),一般使用两个参数,运算符左边是第一个对象,运算符右边传入的是参数(一般为const &类型,因为这里不希望改变参数的值)

返回值类型 operator@(参数1,参数2) //@代表运算符
{

}
在类外边编写的运算符重载函数(不是类的成员函数),如需访问类的私有成员,则需在类内加friend(友元)声明。即friend 函数类型 operator(参数列表)。

如果运算符重载函数为类的成员函数时,参数无中需传入对象本身,因为类的成员函数的参数列表中自带一个隐含的this指针(static成员函数除外)。

下面是一个简单的复数类,实现了两个复数类对象的加、减、乘、除四则运算,由于类内无自带的四则运算符,对象不能直接进行加减乘除,所以需要重载它们来实现两复数间的四则运算:

#include<iostream>
using  namespace std;
class CComplex
{
    public:
        CComplex(double a,double b):m_fReal(a),m_fImag(b)
        {//构造函数 

        }
        ~CComplex()
        {//析构函数 

        } 
        void operator+(const CComplex& c)
        {//重载+号运算符 
            m_fReal += c.m_fReal;
            m_fImag += c.m_fImag;
        }
        void operator-(const CComplex &c)
        {//重载-号运算符 
            m_fReal -= c.m_fReal;
            m_fImag -= c.m_fImag;
        }
        void operator*(const CComplex &c)
        {//重载*号运算符 
            double a = m_fReal;
            double b = m_fImag;
            double d = c.m_fReal;
            double f = c.m_fImag;

            m_fReal = a*d - b*f;
            m_fImag = a*f + b*d;
        }
        void operator/(const CComplex &c)
        {//重载/号运算符 
            double a = m_fReal;
            double b = m_fImag;
            double d = c.m_fReal;
            double f = c.m_fImag;

            m_fReal = (a*d + b*f)/(d*d + f*f);
            m_fImag = (b*d - a*f)/(d*d + f*f);
        }
        double GetReal()
        {//获取实部 
            return m_fReal;
        }
        double GetImag()
        {//获取虚部 
            return m_fImag;
        }
    private:
        double m_fReal;
        double m_fImag;
};

int main()
{
    double a,b;
    cout << "c1's Real and Imag:" << endl;
    cin >> a >> b;
    CComplex c1(a,b);
    cout << "c2's Real and Imag:" << endl;
    cin >> a >> b;
    CComplex c2(a,b);
//  c1+c2;
//  cout << "c1+c2=" << c1.GetReal() << endl;
//  c1*c2;
//  cout << "c1*c2=" << c1.GetReal() << "+" << c1.GetImag() << "i" << endl;

    c1/c2;
    cout << "c1/c2=" << c1.GetReal() << "+" << c1.GetImag() << "i" << endl;
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值