[c++]复数的运算符重载

类的定义和声明

<span style="font-size:32px;">#include<iostream>
#include<string>
using namespace std;

class Complex
{
    friend istream& operator>>(istream &in, Complex &c);
    friend ostream& operator<<(ostream &out, const Complex &c);
    friend Complex operator+(int x, Complex &c);
public:
    Complex(const int real=0,const int imag=0):m_real(real),m_imag(imag)
    {}
    ~Complex()
    {}
    void Show()const
    {
        cout<<"("<<m_real<<","<<m_imag<<")"<<endl;
    }

public:
    Complex operator+(Complex &c)
    {
        return Complex(m_real+c.m_real,m_imag+c.m_imag);
    }

    Complex operator-(Complex &c)
    {
        return Complex(m_real-c.m_real,m_imag-c.m_imag);
    }

    Complex operator*(Complex &c);
    Complex operator/(Complex &c);
    Complex operator+=(Complex &c);
    Complex operator-=(Complex &c);
    Complex operator*=(Complex &c);
    Complex operator/=(Complex &c);
    Complex operator+(int x);
    //friend Complex operator+(int x, Complex &c);
private:
    int m_real;
    int m_imag;
};

Complex Complex::operator+(int x)
{
    return Complex(m_real+x,m_imag);
}

Complex Complex:: operator+=(Complex &c)
{
    m_real = m_real+c.m_real;
    m_imag = m_imag+c.m_imag;
    return *this;
}

Complex Complex::operator-=(Complex &c)
{
    m_real = m_real - c.m_real;
    m_imag = m_imag - c.m_imag;
    return *this;
}

Complex Complex:: operator*(Complex &c)
{
    return Complex(m_real*c.m_real-m_imag*c.m_imag,m_imag*c.m_real+m_real*c.m_imag);
}

Complex Complex::operator*=(Complex &c)
{
    int i = m_real;
    m_real = m_real*c.m_real-m_imag*c.m_imag;
    m_imag = m_imag*c.m_real+i*c.m_imag;
    return *this;
}

Complex Complex::operator/(Complex &c)
{
    Complex temp;

    temp.m_real = (m_real*c.m_real+m_imag*c.m_imag)/(c.m_real*c.m_real+c.m_imag*c.m_imag);
    temp.m_imag = (m_imag*c.m_real-m_real*c.m_imag)/(c.m_real*c.m_real+c.m_imag*c.m_imag);
    return temp;
}

Complex Complex:: operator/=(Complex &c)
{
    int i = m_real;
    m_real = (m_real*c.m_real+m_imag*c.m_imag)/(c.m_real*c.m_real+c.m_imag*c.m_imag);
    m_imag = (m_imag*c.m_real-i*c.m_imag)/(c.m_real*c.m_real+c.m_imag*c.m_imag);
    return *this;
}
ostream& operator<<(ostream &out, const Complex &c)
{
    out<<"("<<c.m_real<<","<<c.m_imag<<")";
    return out;
}

istream& operator>>(istream &in, Complex &c)
{
    in>>c.m_real>>c.m_imag;
    return in;
}
</span>

测试程序:

int main()
{
    Complex c1(1,1);
    Complex c2(1,-1);

    Complex c;
    //c1.operator+(c2)
    c = c1 + c2;
    cout<<c<<endl;
//    c = c1 * c2;
//    cout<<c<<endl;
//    c = c1 / c2;
//    cout<<c<<endl;
//    c = 2 + c1;
//    cout<<c<<endl;
//    c1+=c2;
//    cout<<c1<<endl;
//    c1-=c2;
//    cout<<c1<<endl;
//    c1*=c2;
//    cout<<c1<<endl;
//    c1/=c2;
//    cout<<c1<<endl;
//请不要把它们一起测试,分开
    Complex c3;
    cin>>c3;
    cout<<c3;
    return 0;
}
时间: 2024-10-06 17:21:00

[c++]复数的运算符重载的相关文章

【C++】复数的运算符重载

运算符重载的定义: 用户对于自定义类型的运算操作,例如复数的运算.需要重新定义运算符号(创建函数). 除了类属关系运算符".".成员指针运算符".*".作用域运算符"::".sizeof运算符和三目运算符"?:"以外,C++中的所有运算符都可以重载. 复数的运算符重载如下: <span style="font-size:18px;"> #include<iostream> #incl

C++复数运算符重载(+与&lt;&lt;)

Description 定义一个复数类Complex,重载运算符"+",使之能用于复数的加法运算与输出操作.(1)参加运算的两个运算量可以都是类对象,也可以其中有一个是实数,顺序任意.例如,c1+c2,d+c1,c1+d均合法(设d为实数,c1,c2为复数).(2)输出的算数,在复数两端加上括号,实部和虚部均保留两位小数,如(8.23+2.00i).(7.45-3.40i).(-3.25+4.13i)等.编写程序,分别求两个复数之和.整数和复数之和,并且输出. 请在下面的程序段基础上完

sdut 4-1 复数类的运算符重载

4-1 复数类的运算符重载 Time Limit: 1000MS Memory limit: 65536K 题目描述 通过本题目的练习可以掌握成员运算符重载及友元运算符重载 要求定义一个复数类,重载加法和减法运算符以适应对复数运算的要求,重载插入运算符(<<)以方便输出一个复数的要求. 输入 要求在主函数中创建对象时初始化对象的值. 输出 输出数据共有4行,分别代表a,b的值和它们求和.求差后的值 示例输入 无 示例输出 a=3.2+4.5i b=8.9+5.6i a+b=12.1+10.1i

复数类的相关运算(判断大小及四则运算)-&gt;(构造,析构,拷贝复制,运算符重载)

问题描述: 创建一个Plural(复数)的class类,不借助系统的默认成员函数,在类体中写入构造函数,析构函数,拷贝复制函数以及运算符重载函数.并依次实现复数的大小比较(bool)和复数的四则运算(+,-,*,/). #include<iostream> using  namespace std; class Plural { public: void  Display() { cout << "Real->:" << _real; cout

4-1复数类的运算符重载(SDUTOJ2677)

http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2677&cid=1275 题目描述 通过本题目的练习可以掌握成员运算符重载及友元运算符重载 要求定义一个复数类,重载加法和减法运算符以适应对复数运算的要求,重载插入运算符(<<)以方便输出一个复数的要求. 输入 要求在主函数中创建对象时初始化对象的值. 输出 输出数据共有4行,分别代表a,b的值和它们求和.求差后的值 示例输入 无 示例输出 a=3.2+4.5i b=8.9+5.6i

第九周项目一-复数类的中的运算符重载(续)

在复数类中的运算符重载基础上 (1)再定义一目运算符 -,-c相当于0-c. (2)定义Complex类中的<<和>>运算符的重载,实现输入和输出,改造原程序中对运算结果显示方式,使程序读起来更自然 /* * Copyright (c) 2015,烟台大学计算机学院 * All right reserved. * 作者:赵嵩 * 文件:Demo.cpp * 完成时间:2015年05月16日 * 版本号:v1.0 */ #include <iostream> using

复数中的运算符重载(续)

输入代码: /* *Copyright (c)2015,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:sum123.cpp *作 者:林海云 *完成日期:2015年5月11日 *版 本 号:v2.0 * *问题描述:在复数类中的运算符重载基础上 (1)再定义一目运算符 -,-c相当于0-c. (2)定义Complex类中的<<和>>运算符的重载,实现输入和输出,改造原程序中对运算结果显示方式,使程序读起来更自然. *程序输入:按要求输入两个复

第九周(运算符重载复数类)

/* *copyright(c) 2015,烟台大学计算机学院 *All rights reserved. *文件名称:第九周(运算符重载) *作者:王忠 *完成日期:2015.5.13 *版本号:v1.0 * *问题描述:定义Complex类中的<<和>>运算符的重载,实现输入和输出, *输入描述: *程序输出: #include <iostream> using namespace std; class Complex { public: Complex(){rea

C++:运算符重载函数之成员运算符重载函数

5.2.3 成员运算符重载函数 在C++中可以把运算符重载函数定义为某个类的成员函数,称之为成员运算符重载函数. 1. 定义成员运算符重载函数的语法形式 (1)在类的内部,定义成员运算符重载函数的格式如下: 函数类型 operator 运算符(形参表) {       函数体 } (2)成员运算符重载函数也可以在类中声明成员函数的原型,在类外定义. 在类的内部,声明成员运算符重载函数原型的格式如下: class X{      ...      函数类型 operator运算符(参数表); };