C++ Primer Plus第六版编程练习11.7解答

Complex0.h

#ifndef COMPLEX0_H_
#define COMPlEX0_H_

#include <iostream>
#include <cmath>     //for sqrt()

class Complex
{
private:
    double real;        //store the real part of a complex number
    double imagin;      //store the imaginary part of a complex number
    double modulus;     //store the modulus of a complex number
    void set_modulus() {modulus=sqrt(real*real+imagin*imagin);}
public:
    Complex(double re=0.0, double im=0.0);
    ~Complex();
    Complex conjugate() const;
    Complex operator+(const Complex & co) const;
    Complex operator-(const Complex & co) const;
    Complex operator*(const Complex & co) const;
    Complex operator*(double mul) const;
    friend Complex operator*(double mul, const Complex & co);
    friend std::ostream & operator<<(std::ostream & os, const Complex & co);
    friend std::istream & operator>>(std::istream & is, Complex & co);
};

#endif

Complex0.cpp

#include "Complex0.h"

Complex::Complex(double re, double im)
{
    real=re;
    imagin=im;
    set_modulus();
}

Complex::~Complex()
{
}

Complex Complex::conjugate() const
{
    Complex temp(real, -imagin);
    return temp;
}

Complex Complex::operator+(const Complex & co) const
{
    Complex temp(real+co.real, imagin+co.imagin);
    return temp;
}

Complex Complex::operator-(const Complex & co) const
{
    Complex temp(real-co.real, imagin-co.imagin);
    return temp;
}

Complex Complex::operator*(const Complex & co) const
{
    Complex temp(real*co.real-imagin*co.imagin, real*co.imagin+imagin*co.real);
    return temp;
}

Complex Complex::operator*(double mul) const
{
    Complex temp(real*mul, imagin*mul);
    return temp;
}

Complex operator*(double mul, const Complex & co)
{
    return co*mul;
}

std::ostream & operator<<(std::ostream & os, const Complex & co)
{
    os<<"("<<co.real<<","<<co.imagin<<"i)";
    return os;
}

std::istream & operator>>(std::istream & is, Complex & co)
//注意这里不能写成const Complex & co,因为输入就是要修改对象的值的
{
    std::cout<<"real: ";
    if(is>>co.real)  //如果输入为q则停止输入
    {
        std::cout<<"imaginary: ";
        is>>co.imagin;
    }
    return is;
}

useComplex0.cpp

#include "Complex0.h"

int main(void)
{
    using namespace std;
    Complex a(3.0, 4.0);
    Complex c;
    cout<<"Enter a complex number(q to quit):\n";
    while(cin>>c)
    {
        cout<<"c is "<<c<<endl;
        cout<<"complex conjugate is "<<c.conjugate()<<endl;
        cout<<"a is "<<a<<endl;
        cout<<"a + c is "<<a+c<<endl;
        cout<<"a - c is "<<a-c<<endl;
        cout<<"a * c is "<<a*c<<endl;
        cout<<"2 * c is "<<2*c<<endl;
        cout<<"Enter a complex number(q to quit):\n";
    }
    cout<<"Done!\n";

    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值