第七週上機任務三--實現一個複數類--通過模板類的技術手段,設計Complex,使實部和虛部的型別為定義物件時用的實際型別
阿新 • • 發佈:2019-01-10
/* (程式頭部註釋開始)
* 程式的版權和版本宣告部分
* Copyright (c) 2011, 煙臺大學計算機學院學生
* All rights reserved.
* 檔名稱:實現一個複數類,通過模板類的技術手段,設計Complex,使實部和虛部的型別為定義物件時用的實際型別
* 作 者: 雷恆鑫
* 完成日期: 2012 年 03 月 29 日
* 版 本 號: V1.0
* 對任務及求解方法的描述部分
* 輸入描述:
* 問題描述:
* 程式輸出:
* 程式頭部的註釋結束
*/
#include <iostream> using namespace std; template <class numtype> class Complex { public: Complex( ){real=0;imag=0;} Complex(numtype r,numtype i){real=r;imag=i;} Complex complex_add(Complex &c2); Complex complex_subtract(Complex &c2); Complex complex_multiply(Complex &c2); Complex complex_divide(Complex &c2); void display( ); private: numtype real; numtype imag; }; template <class numtype> Complex<numtype> Complex<numtype>::complex_add(Complex &c2) { Complex c; c.real=real+c2.real; c.imag=imag+c2.imag; return c; } template <class numtype> Complex<numtype> Complex<numtype>::complex_subtract(Complex &c2) { Complex c; c.real=real-c2.real; c.imag=imag-c2.imag; return c; } template <class numtype> Complex<numtype> Complex<numtype>::complex_multiply(Complex &c2) { Complex c; c.real=real*c2.real-imag*c2.imag; c.imag=real*c2.imag+imag*c2.real; return c; } template <class numtype> Complex<numtype> Complex<numtype>::complex_divide(Complex &c2) { Complex c,c3,c4; c3.real=c2.real; c3.imag=c2.imag; c.real=real*c3.real+imag*c3.imag; c.imag=(-real*c3.imag)+imag*c3.real; c4.real=c2.real*c2.real+c2.imag*c3.imag; c.real=c.real/c4.real; c.imag=c.imag/c4.real; return c; } template <class numtype> void Complex<numtype>::display( ) { cout<<"("<<real<<","<<imag<<"i)"<<endl; } int main( ) { Complex<int> c1(3,4),c2(5,-10),c3; c3=c1.complex_add(c2); cout<<"c1+c2="; c3.display( ); Complex<double> c4(3.1,4.4),c5(5.34,-10.21),c6; c6=c4.complex_subtract(c5); cout<<"c4-c5="; c6.display( ); Complex<double> c7(2,4.4),c8(5.34,-10.21),c9; c9=c7.complex_multiply(c8); cout<<"c7*c8="; c9.display( ); Complex<double> c10(3,-2),c11(5,10),c12; c12=c10.complex_divide(c11); cout<<"c10/c11="; c12.display( ); system("pause"); return 0; }
執行結果:
經驗積累:
1.在類外定義Complex complex_add(Complex &c2)函式時為什麼要加“Complex<numtype>”Complex<numtype>::complex_add(Complex &c2)
課本上沒說要加“Complex<numtype>”