zoukankan      html  css  js  c++  java
  • 第六周项目6-复数模板类

    阅读教材例10.1。该例实现了一个复数类,但是美中不足的是,复数类的实部和虚部都固定只能是double型的。可以通过模板类的技术手段,设计Complex,使实部和虚部的类型为定义对象时指定的实际类型。
    (1)要求类成员函数在类外定义。
    (2)在此基础上,再实现减法、乘法和除法

    你可以使用的main()函数如下。

    int main( )
    {
        Complex<int> c1(3,4),c2(5,-10),c3;   //实部和虚部是int型
        c3=c1.complex_add(c2);
        cout<<"c1+c2=";
        c3.display( );
        Complex<double> c4(3.1,4.4),c5(5.34,-10.21),c6; //实部和虚部是double型
        c6=c4.complex_add(c5);
        cout<<"c4+c5=";
        c6.display( );
        //下面测试减法、乘法和除法
        ……
        return 0;
    }


    /*
    * Copyright (c) 2015,烟台大学计算机学院
    * All right reserved.
    * 作者:邵帅
    * 文件:Demo.cpp
    * 完成时间:2015年04月16日
    * 版本号:v1.0
    */
    #include <iostream>
    using namespace std;
    template<class T>
    class Complex
    {
    public:
        Complex( )
        {
            real=0;
            imag=0;
        }
        Complex(T r,T i)
        {
            real=r;
            imag=i;
        }
        Complex complex_add(Complex &c2);
        Complex complex_minus(Complex &c2);
        Complex complex_multiply(Complex &c2);
        Complex complex_divide(Complex &c2);
        void display( );
    private:
        T real;
        T imag;
    };
    //复数相加:(a+bi)+(c+di)=(a+c)+(b+d)i.
    template<class T>   
    Complex<T> Complex<T>::complex_add(Complex<T> &c2)  
    {
        Complex<T> c;    
        c.real=real+c2.real;
        c.imag=imag+c2.imag;
        return c;
    }
    //复数相减:(a+bi)-(c+di)=(a-c)+(b-d)i.
    template <class T>
    Complex<T> Complex<T>::complex_minus(Complex <T> &c2)
    {
        Complex <T> c;
        c.real=real-c2.real;
        c.imag=imag-c2.imag;
        return c;
    }
    //复数相乘:(a+bi)(c+di)=(ac-bd)+(bc+ad)i.
    template <class T>
    Complex<T> Complex<T>::complex_multiply(Complex <T> &c2)
    {
        Complex <T> c;
        c.real=real*c2.real-imag*c2.imag;
        c.imag=imag*c2.real+real*c2.imag;
        return c;
    }
    //复数相除:(a+bi)/(c+di)=(ac+bd)/(c^2+d^2) +(bc-ad)/(c^2+d^2)i
    template <class T>
    Complex<T> Complex<T>::complex_divide(Complex <T> &c2)
    {
        Complex <T> c;
        T d=c2.real*c2.real+c2.imag*c2.imag;
        c.real=(real*c2.real+imag*c2.imag)/d;
        c.imag=(imag*c2.real-real*c2.imag)/d;
        return c;
    }
    template<class T>
    void Complex<T>::display( )
    {
        cout<<"("<<real<<","<<imag<<"i)"<<endl;
    }
    
    int main( )
    {
        Complex<int> c1(3,4),c2(5,-10),c3;
        cout<<"c1=";
        c1.display( );
        cout<<"c2=";
        c2.display( );
        c3=c1.complex_add(c2);
        cout<<"c1+c2=";
        c3.display( );
        c3=c1.complex_minus(c2);
        cout<<"c1-c2=";
        c3.display( );
        c3=c1.complex_multiply(c2);
        cout<<"c1*c2=";
        c3.display( );
        c3=c1.complex_divide(c2);
        cout<<"c1/c2=";
        c3.display( );
        cout<<endl;
        Complex<double> c4(3.1,4.4),c5(5.34,-10.21),c6;
        cout<<"c4=";
        c4.display( );
        cout<<"c5=";
        c5.display( );
        c6=c4.complex_add(c5);
        cout<<"c4+c5=";
        c6.display( );
        c6=c4.complex_minus(c5);
        cout<<"c4-c5=";
        c6.display( );
        c6=c4.complex_multiply(c5);
        cout<<"c4*c5=";
        c6.display( );
        c6=c4.complex_divide(c5);
        cout<<"c4/c5=";
        c6.display( );
        return 0;
    }
    

    悲哀。。。

    竟然忘了什么叫做复数。

    是时候复习一下数学了。。。


    @ Mayuko

  • 相关阅读:
    alter table move
    VI常用命令
    【转】window.showModalDialog以及window.open用法简介
    这算是随想
    SQL Prompt——SQL智能提示插件
    C#和VB.NET中类型相关资料整理
    仿查询分析器的C#计算器——6.函数波形绘制
    Snippet Compiler——代码段编译工具
    仿查询分析器的C#计算器——4.语法分析
    【高效程序员系列】目录
  • 原文地址:https://www.cnblogs.com/mayuko/p/4567506.html
Copyright © 2011-2022 走看看