C++課設(shè)報(bào)告書(shū)復(fù)數(shù)類的設(shè)計(jì)與實(shí)現(xiàn)_第1頁(yè)
C++課設(shè)報(bào)告書(shū)復(fù)數(shù)類的設(shè)計(jì)與實(shí)現(xiàn)_第2頁(yè)
C++課設(shè)報(bào)告書(shū)復(fù)數(shù)類的設(shè)計(jì)與實(shí)現(xiàn)_第3頁(yè)
C++課設(shè)報(bào)告書(shū)復(fù)數(shù)類的設(shè)計(jì)與實(shí)現(xiàn)_第4頁(yè)
C++課設(shè)報(bào)告書(shū)復(fù)數(shù)類的設(shè)計(jì)與實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩20頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

成績(jī)?cè)u(píng)定表學(xué)生姓名李勇強(qiáng)班級(jí)學(xué)號(hào)1103060215專業(yè)通信工程課程設(shè)計(jì)題目復(fù)數(shù)類的設(shè)計(jì)與實(shí)現(xiàn)評(píng)語(yǔ)組長(zhǎng)簽字:成績(jī)?nèi)掌?0年月日

課程設(shè)計(jì)任務(wù)書(shū)學(xué)院信息科學(xué)與工程學(xué)院專業(yè)通信工程學(xué)生姓名李勇強(qiáng)班級(jí)學(xué)號(hào)1103060215課程設(shè)計(jì)題目復(fù)數(shù)類的設(shè)計(jì)與實(shí)現(xiàn)實(shí)踐教學(xué)要求與任務(wù)設(shè)計(jì)一個(gè)復(fù)數(shù)類,復(fù)數(shù)類的數(shù)據(jù)成員是real和imag,它們的數(shù)據(jù)類型是double,分別表示復(fù)數(shù)的實(shí)部和虛部,要求如下:(1)編寫(xiě)一個(gè)帶有缺省參數(shù)的構(gòu)造函數(shù),默認(rèn)值為(0,0),實(shí)現(xiàn)一個(gè)復(fù)數(shù)的構(gòu)造。(2)編寫(xiě)一個(gè)拷貝構(gòu)造函數(shù),實(shí)現(xiàn)一個(gè)復(fù)數(shù)的拷貝構(gòu)造。(3)編寫(xiě)一個(gè)析構(gòu)函數(shù),在函數(shù)中輸出(real,imag)被析構(gòu),例如:如果復(fù)數(shù)的實(shí)部為1,虛部為2,則被析構(gòu)時(shí)程序輸出:“(1,2)被析構(gòu)”。(4)重載運(yùn)算符“+”為復(fù)數(shù)類的成員函數(shù),其功能是返回兩個(gè)復(fù)數(shù)的相加的結(jié)果。(5)重載運(yùn)算符“-”為復(fù)數(shù)類的成員函數(shù),其功能是返回兩個(gè)復(fù)數(shù)的相減的結(jié)果。(6)重載運(yùn)算符“*”為復(fù)數(shù)類的友元函數(shù),其功能是返回兩個(gè)復(fù)數(shù)的相乘的結(jié)果。(7)重載運(yùn)算符“/”為復(fù)數(shù)類的友元函數(shù),其功能是返回兩個(gè)復(fù)數(shù)的相除的結(jié)果。(8)重載單目運(yùn)算符“-”為復(fù)數(shù)類的友元函數(shù),其功能是返回當(dāng)前復(fù)數(shù)的相反數(shù)。(9)重載運(yùn)算符“>>”為復(fù)數(shù)類的友元函數(shù),其功能是按照以格式(real,imag)。(10)輸入復(fù)數(shù)。例如:如果復(fù)數(shù)的實(shí)部為1,虛部為2,則輸入的格式是“(1,2)”。(11)重載運(yùn)算符“<<”為復(fù)數(shù)類的友元函數(shù),其功能是按照以格式(real,imag)(12)輸出復(fù)數(shù)。例如:如果復(fù)數(shù)的實(shí)部為1,虛部為2,則輸出的結(jié)果是“(1,2)”。(13)以上函數(shù)在類的內(nèi)部寫(xiě)出函數(shù)原型,在類的外部寫(xiě)出函數(shù)實(shí)現(xiàn)代碼,最后編寫(xiě)一個(gè)主函數(shù)main測(cè)試以上的函數(shù)功能。工作計(jì)劃與進(jìn)度安排第17周:分析題目,查閱課題相關(guān)資料,進(jìn)行類設(shè)計(jì)、算法設(shè)計(jì);第18周:程序的設(shè)計(jì)、調(diào)試與實(shí)現(xiàn);第19周:程序測(cè)試與分析,撰寫(xiě)課程設(shè)計(jì)報(bào)告,進(jìn)行答辯驗(yàn)收。指導(dǎo)教師:201年月日專業(yè)負(fù)責(zé)人:201年月日學(xué)院教學(xué)副院長(zhǎng):201年月日摘要本文采用了C++語(yǔ)言來(lái)完成復(fù)數(shù)類的設(shè)計(jì)與實(shí)現(xiàn)。首先設(shè)計(jì)了復(fù)數(shù)類,在類中定義了復(fù)數(shù)的實(shí)部和虛部,然后在類中設(shè)計(jì)構(gòu)造函數(shù)和析構(gòu)函數(shù)用于對(duì)象的初始化和清理,類中的重載運(yùn)算符函數(shù)用于實(shí)現(xiàn)對(duì)復(fù)數(shù)的一些基本運(yùn)算和輸入輸出。程序分別采用VisualC++6.0的控制臺(tái)工程和MFC工程來(lái)運(yùn)行。最終,通過(guò)對(duì)兩種程序的測(cè)試結(jié)果表明:復(fù)數(shù)類的方法函數(shù)設(shè)計(jì)正確,兩種程序均能正確實(shí)現(xiàn)復(fù)數(shù)類方法函數(shù)的功能。關(guān)鍵詞:復(fù)數(shù);復(fù)數(shù)類;控制臺(tái)工程;MFC工程

目錄1需求分析 12算法基本原理 13類設(shè)計(jì) 24基于控制臺(tái)的應(yīng)用程序 34.1類的接口設(shè)計(jì) 34.2類的實(shí)現(xiàn) 44.3主函數(shù)設(shè)計(jì) 64.4基于控制臺(tái)的應(yīng)用程序測(cè)試 75基于MFC的應(yīng)用程序 85.1基于MFC的應(yīng)用程序設(shè)計(jì) 95.1.1MFC程序界面設(shè)計(jì) 95.1.2MFC程序代碼設(shè)計(jì) 125.2基于MFC的應(yīng)用程序測(cè)試 15結(jié)論 19參考文獻(xiàn) 201需求分析(1)構(gòu)造函數(shù)可以用于給對(duì)象賦初值;析構(gòu)函數(shù)可以用于對(duì)象的生命期結(jié)束時(shí),做一些清理工作;拷貝構(gòu)造函數(shù)可以用于復(fù)制對(duì)象。(2)類中重載運(yùn)算符“+”、“-”、“*”、“/”的函數(shù),可以依據(jù)復(fù)數(shù)的四則運(yùn)算法則設(shè)計(jì)函數(shù)內(nèi)部代碼。(3)復(fù)數(shù)的相反數(shù)為復(fù)數(shù)的實(shí)部與虛部分別取相反數(shù)。(4)整個(gè)程序可以通過(guò)構(gòu)建復(fù)數(shù)類,類中定義數(shù)據(jù)成員(復(fù)數(shù)的實(shí)部、虛部),設(shè)計(jì)方法,實(shí)現(xiàn)復(fù)數(shù)類對(duì)象的構(gòu)造、析構(gòu),復(fù)數(shù)的加減乘除、取相反數(shù)的運(yùn)算。并通過(guò)重載流提取運(yùn)算符和流插入運(yùn)算符,來(lái)進(jìn)行復(fù)數(shù)的輸入和輸出。(5)要求類的聲明與實(shí)現(xiàn)相分離,可以將其保存在不同的文件中,并在類的實(shí)現(xiàn)文件中包含類的聲明頭文件。算法基本原理(1)構(gòu)造函數(shù)是一種特殊的成員函數(shù),在建立對(duì)象時(shí)自動(dòng)執(zhí)行。其名字與類名同名,不具有任何類型,不返回任何值。構(gòu)造函數(shù)中參數(shù)的值可以指定為默認(rèn)值??截悩?gòu)造函數(shù)只有一個(gè)參數(shù),這個(gè)參數(shù)是本類的對(duì)象(一般約定加const聲明)。(2)析構(gòu)函數(shù)也是一個(gè)特殊的成員函數(shù),其名字是類名前加一個(gè)“~”符號(hào)。構(gòu)造函數(shù)不返回任何值,無(wú)函數(shù)類型和函數(shù)參數(shù)。當(dāng)對(duì)象的生命期結(jié)束時(shí),自動(dòng)執(zhí)行析構(gòu)函數(shù)。(3)運(yùn)算符重載的方法是定義一個(gè)重載運(yùn)算符的函數(shù),在需要執(zhí)行被重載的運(yùn)算符時(shí),系統(tǒng)就自動(dòng)調(diào)用該函數(shù)。(4)復(fù)數(shù)的加法法則:設(shè)z1=a+bi,z2=c+di是任意兩個(gè)復(fù)數(shù),則它們的和為(a+bi)+(c+di)=(a+c)+(b+d)i。兩個(gè)復(fù)數(shù)的和依然是復(fù)數(shù),它的實(shí)部是原來(lái)兩個(gè)復(fù)數(shù)實(shí)部的和,它的虛部是原來(lái)兩個(gè)虛部。(5)復(fù)數(shù)的減法法則:設(shè)z1=a+bi,z2=c+di是任意兩個(gè)復(fù)數(shù),則它們的差是(a+bi)-(c+di)=(a-c)+(b-d)i。兩個(gè)復(fù)數(shù)的差依然是復(fù)數(shù),它的實(shí)部是原來(lái)兩個(gè)復(fù)數(shù)實(shí)部的差,它的虛部是原來(lái)兩個(gè)虛部的差。(6)復(fù)數(shù)的乘法法則:設(shè)z1=a+bi,z2=c+di是任意兩個(gè)復(fù)數(shù),那么它們的積(a+bi)(c+di)=(ac-bd)+(bc+ad)i。把兩個(gè)復(fù)數(shù)相乘,類似兩個(gè)多項(xiàng)式相乘,結(jié)果中i^2=?1,把實(shí)部與虛部分別合并。兩個(gè)復(fù)數(shù)的積依然是一個(gè)復(fù)數(shù)。(7)復(fù)數(shù)的除法法則:設(shè)z1=a+bi,z2=c+di是任意兩個(gè)復(fù)數(shù),滿足(c+di)(x+yi)=(a+bi)的復(fù)數(shù)x+yi(x,y∈R)叫復(fù)數(shù)a+bi除以復(fù)數(shù)c+di的商。其具體運(yùn)算方法為:將分子和分母同時(shí)乘以分母的共軛復(fù)數(shù),再分別對(duì)分子和分母應(yīng)用乘法法則運(yùn)算,即(a+bi)/(c+di)=[(a+bi)(c-di)]/[(c+di)(c-di)]=[(ac+bd)+(bc-ad)i]/(c^2+d^2)。兩個(gè)復(fù)數(shù)的商依然是一個(gè)復(fù)數(shù)。(8)復(fù)數(shù)取相反數(shù)法則:設(shè)z1=a+bi是任意復(fù)數(shù),則其相反數(shù)為-a-bi,即復(fù)數(shù)的實(shí)部與虛部分別取相反數(shù)。3類設(shè)計(jì)從上面的算法分析可以看到,本設(shè)計(jì)的關(guān)鍵是復(fù)數(shù)類的方法函數(shù)的設(shè)計(jì)??梢远x一個(gè)復(fù)數(shù)類Complex,類中定義私有數(shù)據(jù)成員real和imag,它們的數(shù)據(jù)類型是double,分別表示復(fù)數(shù)的實(shí)部和虛部。類中應(yīng)包括的成員函數(shù)有帶有缺省參數(shù)的構(gòu)造函數(shù)Complex(doubler=0,doublei=0),拷貝構(gòu)造函數(shù)Complex(constComplex&),析構(gòu)函數(shù)~Complex(),重載運(yùn)算符“+”的函數(shù)Complexoperator+(Complex&),重載運(yùn)算符“-”的函數(shù)Complexoperator-(Complex&)。類中應(yīng)包括的友元函數(shù)有重載運(yùn)算符“*”的函數(shù)friendComplexoperator*(Complex&,Complex&),重載運(yùn)算符“/”的函數(shù)friendComplexoperator/(Complex&,Complex&),重載單目運(yùn)算符“-”的函數(shù)friendComplexoperator-(Complex&),重載流提取運(yùn)算符“>>”的函數(shù)friendistream&operator>>(istream&,Complex&),重載流插入運(yùn)算符“<<”的函數(shù)friendostream&operator<<(ostream&,Complex&)。以上各函數(shù)的訪問(wèn)屬性都設(shè)置為公用類型。并且在類的內(nèi)部寫(xiě)出函數(shù)原型,在類的外部寫(xiě)出函數(shù)實(shí)現(xiàn)代碼。4基于控制臺(tái)的應(yīng)用程序整個(gè)程序分為三個(gè)獨(dú)立的文檔。Fushu.h文件中包括復(fù)數(shù)類Complex的聲明;Fushu.cpp文件中包括這個(gè)類的成員函數(shù)和友元函數(shù)實(shí)現(xiàn)文件;main.cpp文件包括程序的主函數(shù)。主函數(shù)中定義類Complex的對(duì)象,通過(guò)對(duì)象測(cè)試類的各函數(shù)的功能。4.1類的接口設(shè)計(jì)//Fushu.h文件,實(shí)現(xiàn)類的聲明#include<iostream.h>classComplex//復(fù)數(shù)類Complex聲明{private:doublereal;//復(fù)數(shù)的實(shí)部 doubleimag;//復(fù)數(shù)的虛部public://外部接口 Complex(doubler=0,doublei=0);//聲明帶有缺省參數(shù)的構(gòu)造函數(shù),默認(rèn)值//為(0,0) Complex(constComplex&cop);//聲明拷貝構(gòu)造函數(shù) ~Complex();//聲明析構(gòu)函數(shù) Complexoperator+(Complex&c2);//聲明重載運(yùn)算符“+”的函數(shù)Complexoperator-(Complex&c2);//聲明重載運(yùn)算符“-”的函數(shù)friendComplexoperator*(Complex&c1,Complex&c2);//聲明重載運(yùn)算符“*”//為復(fù)數(shù)類的友元函數(shù)friendComplexoperator/(Complex&c1,Complex&c2);//聲明重載運(yùn)算符“/”//為復(fù)數(shù)類的友元函數(shù)friendComplexoperator-(Complex&c);//聲明重載單目運(yùn)算符“-”為復(fù)數(shù)類的//友元函數(shù)friendistream&operator>>(istream&,Complex&);//聲明重載運(yùn)算符“>>”為復(fù)//數(shù)類的友元函數(shù) friendostream&operator<<(ostream&,Complex&);//聲明重載運(yùn)算符“<<”為//復(fù)數(shù)類的友元函數(shù)};類中定義私有數(shù)據(jù)成員real和imag,它們的數(shù)據(jù)類型是double,分別表示復(fù)數(shù)的實(shí)部和虛部。類中聲明了各成員函數(shù)和友元函數(shù),且訪問(wèn)屬性都設(shè)置為公用類型。4.2類的實(shí)現(xiàn)//Fushu.cpp文件,類實(shí)現(xiàn)#include"Fushu.h" //包含類的聲明頭文件Complex::Complex(doubler,doublei)//定義帶有缺省參數(shù)的構(gòu)造函數(shù){real=r;//給復(fù)數(shù)實(shí)部賦初值imag=i;//給復(fù)數(shù)虛部賦初值}Complex::Complex(constComplex&cop)//定義拷貝構(gòu)造函數(shù){real=cop.real;//實(shí)現(xiàn)復(fù)數(shù)實(shí)部的拷貝imag=cop.imag;//實(shí)現(xiàn)復(fù)數(shù)虛部的拷貝}Complex::~Complex()//定義析構(gòu)函數(shù){cout<<"("<<real<<","<<imag<<")"<<"被析構(gòu)"<<endl;//在函數(shù)中輸出(real,//imag)被析構(gòu)}ComplexComplex::operator+(Complex&c2)//定義重載運(yùn)算符“+”的函數(shù){returnComplex(real+c2.real,imag+c2.imag);//建立一個(gè)臨時(shí)的無(wú)名對(duì)象。在建立//臨時(shí)對(duì)象過(guò)程中將兩個(gè)復(fù)數(shù)相加的結(jié)果作為實(shí)參調(diào)用//構(gòu)造函數(shù)。return語(yǔ)句將此臨時(shí)對(duì)象作為函數(shù)返回值。}ComplexComplex::operator-(Complex&c2)//定義重載運(yùn)算符“-”的函數(shù){returnComplex(real-c2.real,imag-c2.imag);//建立一個(gè)臨時(shí)的無(wú)名對(duì)象。在建立臨時(shí)//對(duì)象過(guò)程中將兩個(gè)復(fù)數(shù)相減的結(jié)果作為實(shí)參調(diào)用構(gòu)造//函數(shù)。return語(yǔ)句將此臨時(shí)對(duì)象作為函數(shù)返回值。}Complexoperator*(Complex&c1,Complex&c2)//定義重載運(yùn)算符“*”為復(fù)數(shù)類//的友元函數(shù){doublex,y;//定義兩個(gè)變量,分別表示兩個(gè)復(fù)數(shù)積的實(shí)部和虛部x=c1.real*c2.real-c1.imag*c2.imag;//兩個(gè)復(fù)數(shù)積的實(shí)部y=c1.real*c2.imag+c1.imag*c2.real;//兩個(gè)復(fù)數(shù)積的虛部returnComplex(x,y);//建立一個(gè)臨時(shí)的無(wú)名對(duì)象。在建立臨時(shí)對(duì)象過(guò)程調(diào)用構(gòu)造//函數(shù)。return語(yǔ)句將此臨時(shí)對(duì)象作為函數(shù)返回值。}Complexoperator/(Complex&c1,Complex&c2)//定義重載運(yùn)算符“/”為復(fù)數(shù)類的//友元函數(shù){doublex,y;//定義兩個(gè)變量,分別表示兩個(gè)復(fù)數(shù)商的實(shí)部和虛部x=(c1.real*c2.real+c1.imag*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag);//兩個(gè)復(fù)數(shù)//商的實(shí)部y=(c1.imag*c2.real-c1.real*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag);///兩個(gè)復(fù)數(shù)//商的虛部returnComplex(x,y);}Complexoperator-(Complex&c)//定義重載單目運(yùn)算符“-”為復(fù)數(shù)類的友元函數(shù){returnComplex(-c.real,-c.imag);}istream&operator>>(istream&input,Complex&c)//定義重載運(yùn)算符“>>”為復(fù)數(shù)類//的友元函數(shù){input.ignore();//調(diào)用istream類的成員函數(shù)ignore函數(shù),跳過(guò)輸入流中//一個(gè)字符input>>c.real;input.ignore();input>>c.imag;input.ignore(3,'\n');//跳過(guò)輸入流中'\n'之前(包括'\n')的字符returninput;}ostream&operator<<(ostream&output,Complex&c)//定義重載運(yùn)算符“<<”為復(fù)數(shù)//類的友元函數(shù){output<<"("<<c.real<<","<<c.imag<<")";//以格式(real,imag)輸出復(fù)數(shù)returnoutput;}在重載運(yùn)算符“>>”的函數(shù)中,由于要按照以格式(real,imag)輸入復(fù)數(shù),所以在提取輸入流中的字符時(shí),必須先跳過(guò)字符“(”,再將輸入流中第1個(gè)數(shù)據(jù)賦值給復(fù)數(shù)的實(shí)部,然后跳過(guò)字符“,”,再將輸入流中第2個(gè)數(shù)據(jù)賦值給復(fù)數(shù)的虛部,此時(shí),輸入流中還剩有字符“)”和結(jié)束符“\n”,為了下次能成功為復(fù)數(shù)的實(shí)部和虛部賦值,必須將它們跳過(guò),所以調(diào)用函數(shù)ignore(3,'\n')。另外,在重載運(yùn)算符“+”、“-”、“*”、“/”、和單目運(yùn)算符“-”的函數(shù)中,為了在最終測(cè)試時(shí),每調(diào)用完一次重載運(yùn)算符只執(zhí)行一次析構(gòu)函數(shù),所以在函數(shù)中都沒(méi)有定義有名的對(duì)象,而是建立一個(gè)臨時(shí)的無(wú)名對(duì)象。在建立臨時(shí)對(duì)象過(guò)程中將兩個(gè)復(fù)數(shù)運(yùn)算的結(jié)果作為實(shí)參調(diào)用構(gòu)造函數(shù)。return語(yǔ)句將此臨時(shí)對(duì)象作為函數(shù)返回值。4.3主函數(shù)設(shè)計(jì)//main.cpp主函數(shù)#include"Fushu.h"intmain()//主函數(shù){Complexc0;//建立Complex類對(duì)象c0,沒(méi)有給定實(shí)參cout<<"c0="<<c0<<endl;//輸出對(duì)象c0的值,測(cè)試重載運(yùn)算符“<<”的函數(shù)Complexc1(11,44);//建立對(duì)象c1,給定2個(gè)實(shí)參cout<<"c1="<<c1<<endl;//輸出對(duì)象c1的值cout<<"inputcomplexnumberc1:";cin>>c1;為c1重新賦值,測(cè)試重載運(yùn)算符“>>”的函數(shù)cout<<"c1="<<c1<<endl;Complexc2(c1);建立對(duì)象c2,用c1初始化c2,測(cè)試拷貝構(gòu)造函數(shù)cout<<"c2="<<c2<<endl;cout<<"-c2="<<-c2<<endl;//輸出c2的相反數(shù),測(cè)試重載單目運(yùn)算符“-”的函數(shù)cout<<"inputcomplexnumberc2:";cin>>c2;//為c2重新賦值cout<<"c1+c2="<<c1+c2<<endl;//輸出c1+c2的和cout<<"c1-c2="<<c1-c2<<endl;//輸出c1-c2的差cout<<"c1*c2="<<c1*c2<<endl;//輸出c1*c2的積cout<<"c1/c2="<<c1/c2<<endl;//輸出c1/c2的商return0;}在程序的主函數(shù)部分,首先建立了對(duì)象c0,沒(méi)有給定實(shí)參,測(cè)試缺省參數(shù)的構(gòu)造函數(shù),默認(rèn)值為(0,0),通過(guò)輸出c0的值來(lái)觀察正確性;同時(shí),通過(guò)輸出c0的值也測(cè)試了重載運(yùn)算符“<<”的函數(shù)的正確性。然后新建立了對(duì)象c1,給定了2個(gè)實(shí)參,再次調(diào)用缺省參數(shù)的構(gòu)造函數(shù),而這次復(fù)數(shù)實(shí)部和虛部的值都通過(guò)實(shí)參給定,輸出c1的值以觀察正確性。再輸入c1的值,為c1重新賦值,測(cè)試重載運(yùn)算符“>>”的函數(shù)。新建立對(duì)象c2,用c1初始化c2,測(cè)試拷貝構(gòu)造函數(shù)。輸出c2的相反數(shù),測(cè)試重載單目運(yùn)算符“-”的函數(shù),在輸出c2的相反數(shù)后,執(zhí)行-c2的析構(gòu)函數(shù)。再次輸入c2的值,為c2重新賦值。然后,分別依次輸出c1、c2的和、差、積、商,測(cè)試重載運(yùn)算符“+”、“-”、“*”、“/”的函數(shù),每輸出一次結(jié)果,就執(zhí)行一次各自的析構(gòu)函數(shù)。最后,分別執(zhí)行對(duì)象c2、c1、c0的析構(gòu)函數(shù)。4.4基于控制臺(tái)的應(yīng)用程序測(cè)試程序運(yùn)行結(jié)果如圖1所示。圖1程序運(yùn)行結(jié)果通過(guò)程序的運(yùn)行結(jié)果可以看出,在main函數(shù)中,通過(guò)對(duì)象c0(不給定實(shí)參)、c1(給定兩個(gè)實(shí)參)測(cè)試了缺省參數(shù)的構(gòu)造函數(shù);直接用運(yùn)算符“<<”、“>>”輸出、輸入對(duì)象的值,測(cè)試了重載運(yùn)算符“<<”、“>>”函數(shù);通過(guò)對(duì)象c2,測(cè)試了拷貝構(gòu)造函數(shù);又通過(guò)輸出c2的相反數(shù),測(cè)試了重載單目運(yùn)算符“-”的函數(shù);分別輸出c1、c2的和、差、積、商,依次測(cè)試了重載運(yùn)算符“+”、“-”、“*”、“/”函數(shù),并且,從“-c2”開(kāi)始每輸出一次運(yùn)行結(jié)果,就調(diào)用一次各自的析構(gòu)函數(shù),在程序的最后,分別執(zhí)行對(duì)象c2、c1、c0的析構(gòu)函數(shù),測(cè)試了析構(gòu)函數(shù)的功能。最終,通過(guò)主函數(shù)main的測(cè)試,證明了類中各函數(shù)功能的正確性。5基于MFC的應(yīng)用程序隨著應(yīng)用程序復(fù)雜性的增加,Win32應(yīng)用程序代碼也必然越復(fù)雜。為了幫助用戶處理那些經(jīng)常使用且復(fù)雜繁瑣的各種Windows操作,VisualC++設(shè)計(jì)了一套基礎(chǔ)類庫(kù)MFC,把傳統(tǒng)的Windows編程規(guī)范中的大多數(shù)內(nèi)容封裝成為各種類。MFC圖形界面程序與DOS界面程序的輸入輸出方式不同,DOS界面程序采用字符交互式實(shí)現(xiàn)數(shù)據(jù)輸入輸出,MFC的圖形程序界面采用標(biāo)準(zhǔn)Windows窗口和控件實(shí)現(xiàn)輸入輸出。因此應(yīng)先在MFC類的框架下加入所設(shè)計(jì)的復(fù)數(shù)類,再通過(guò)圖形界面的輸入輸出改造來(lái)完成。5.1基于MFC的圖形界面程序設(shè)計(jì)5.1.1MFC程序界面設(shè)計(jì)首先在VC中建立MFCAppWizard(exe)工程,名稱為FS_Jisuanqi,并在向?qū)У腟tep1中選擇Dialogbased,即建立基于對(duì)話框的應(yīng)用程序,如下圖2~3所示。圖2建立MFCAppWizard(exe)工程圖3建立基于對(duì)話框的應(yīng)用程序在對(duì)話框模板處右擊鼠標(biāo),從彈出的快捷菜單中選擇“屬性”菜單項(xiàng),出現(xiàn)如圖4所示的對(duì)話框?qū)傩源翱?。將?duì)話框標(biāo)題改為“復(fù)數(shù)計(jì)算器”。圖4對(duì)話框?qū)傩源翱趯?duì)話框資源中的默認(rèn)對(duì)話框利用工具箱改造成如下界面,如圖5所示。圖5復(fù)數(shù)計(jì)算器界面設(shè)計(jì)圖5所示的界面中包含了10個(gè)StaticText控件,2個(gè)GroupBox控件,2個(gè)Picture控件,7個(gè)Button控件,和6個(gè)EditBox控件,控件的基本信息列表如下表1所示。表1控件基本信息控件類別控件ID控件Caption說(shuō)明StaticTextIDC_STATIC實(shí)部虛部復(fù)數(shù)1:,復(fù)數(shù)2:,實(shí)部虛部運(yùn)算結(jié)果:,GroupBoxIDC_STATIC數(shù)據(jù)輸入?yún)^(qū)基本運(yùn)算PictureIDC_STATIC一條水平線一條水平線BottonIDC_BUTTON_fuzhi復(fù)制將復(fù)數(shù)1中的數(shù)據(jù)復(fù)制到復(fù)數(shù)2中IDC_BUTTON_jia+計(jì)算兩個(gè)復(fù)數(shù)和IDC_BUTTON_jian-計(jì)算兩個(gè)復(fù)數(shù)差I(lǐng)DC_BUTTON_cheng*計(jì)算兩個(gè)復(fù)數(shù)積IDC_BUTTON_chu/計(jì)算兩個(gè)復(fù)數(shù)商IDC_BUTTON_fanshu1:相反數(shù)計(jì)算復(fù)數(shù)1的相反數(shù)IDC_BUTTON_Exit退出EditBoxIDC_EDIT_r1復(fù)數(shù)1的實(shí)部IDC_EDIT_i1復(fù)數(shù)1的虛部IDC_EDIT_r2復(fù)數(shù)2的實(shí)部IDC_EDIT_i2復(fù)數(shù)2的虛部IDC_EDIT_R運(yùn)算結(jié)果的實(shí)部IDC_EDIT_I運(yùn)算結(jié)果的虛部5.1.2MFC程序代碼設(shè)計(jì)為了能夠?qū)?duì)話框界面上的控件與代碼聯(lián)系起來(lái),需要為6個(gè)EditBox控件建立MemberVariables,按Ctrl+w鍵進(jìn)入MFCClassWizard界面,選擇MemberVariables選項(xiàng)卡,可顯示成員變量設(shè)置界面,如圖6所示。圖6成員變量設(shè)置界面通過(guò)該界面設(shè)置與6個(gè)EditBox控件對(duì)應(yīng)的成員變量,具體如表2所示。表2控件基本信息控件ID成員變量類型成員變量名稱IDC_EDIT_r1doublem_real1IDC_EDIT_i1doublem_imag1IDC_EDIT_r2doublem_real2IDC_EDIT_i2doublem_imag2IDC_EDIT_Rdoublem_RrealIDC_EDIT_Idoublem_Rimag下面是編寫(xiě)代碼的重要階段,可以借鑒在設(shè)計(jì)基于DOS界面的控制臺(tái)應(yīng)用程序的代碼,并將其作必要的改寫(xiě),具體改寫(xiě)的步驟與內(nèi)容如下。①將Fushu.h文件和Fushu.cpp文件合并成一個(gè)文件,重新命名為Fushu.h,并將其加入MFC工程。②修改Fushu.h文件具體包括:將析構(gòu)函數(shù)的函數(shù)聲明和定義注釋掉,因?yàn)樵趫D形界面的程序上已經(jīng)不能用cout流輸出了;將重載運(yùn)算符“>>”、“<<”的函數(shù)聲明和定義注釋掉,同樣,在圖形界面的程序上已經(jīng)不能用cin流和cout流來(lái)輸入輸出;由于Complex類中的數(shù)據(jù)成員為私有類型,所以,添加兩個(gè)Complex類成員函數(shù),分別用于返回Complex類對(duì)象的實(shí)部和虛部。這樣便能在按鈕的消息映射函數(shù)中輸出復(fù)數(shù)的值。其具體代碼如下:doubleComplex::display_real(){ returnreal;}doubleComplex::display_imag(){ returnimag;}以上兩個(gè)函數(shù)在類的內(nèi)部寫(xiě)出函數(shù)原型,在類的外部寫(xiě)出函數(shù)實(shí)現(xiàn)代碼。③在對(duì)話框類的實(shí)現(xiàn)文件FS_JisuanqiDlg.cpp中加入#include"Fushu.h",以實(shí)現(xiàn)在該文件中可使用Complex類。④添加按鈕的消息映射函數(shù),按快捷鍵Ctrl+W,打開(kāi)MFCClassWizard界面,選擇MessageMaps選項(xiàng)卡,可顯示成員函數(shù)設(shè)置界面,如圖7所示。圖7成員函數(shù)設(shè)置界面⑤編寫(xiě)復(fù)制按鈕的消息處理函數(shù),實(shí)現(xiàn)將復(fù)數(shù)1中的數(shù)據(jù)復(fù)制到復(fù)數(shù)2中,具體代碼如下voidCFS_JisuanqiDlg::OnBUTTONfuzhi(){ //TODO:Addyourcontrolnotificationhandlercodehere UpdateData();//調(diào)用函數(shù),使數(shù)據(jù)由控件向相關(guān)聯(lián)的成員變量復(fù)制 Complexc1(m_real1,m_imag1);//建立Complex類對(duì)象,用輸入的復(fù)數(shù)//1的值初始化 Complexc2(c1);//建立對(duì)象c2,調(diào)用拷貝構(gòu)造函數(shù),用c1初始化c2 m_real2=c2.display_real();//將對(duì)象c2的實(shí)部賦值給成員變量m_real2 m_imag2=c2.display_imag();//將對(duì)象c2的虛部賦值給成員變量m_imag2 UpdateData(FALSE);//調(diào)用函數(shù),使數(shù)據(jù)由控件相關(guān)聯(lián)的成員變量向控件復(fù)制}⑥與編寫(xiě)復(fù)制按鈕的消息處理函數(shù)類似,分別編寫(xiě)加、減、乘、除按鈕的消息處理函數(shù)。下面是“加”按鈕的消息處理函數(shù)代碼,減、乘、除以此類推,只是將代碼中“+”分別換成“-”、“*”、“/”。voidCFS_JisuanqiDlg::OnBUTTONjia(){ //TODO:Addyourcontrolnotificationhandlercodehere UpdateData(); Complexc1(m_real1,m_imag1); Complexc2(m_real2,m_imag2); Complexc3; c3=c1+c2;//調(diào)用重載運(yùn)算符“+”函數(shù),實(shí)現(xiàn)求兩個(gè)復(fù)數(shù)的和 m_Rreal=c3.display_real(); m_Rimag=c3.display_imag(); UpdateData(FALSE);}編寫(xiě)求復(fù)數(shù)1的相反數(shù)按鈕的消息處理函數(shù)代碼如下:voidCFS_JisuanqiDlg::OnBUTTONfanshu(){ //TODO:Addyourcontrolnotificationhandlercodehere UpdateData(); Complexc1(m_real1,m_imag1); Complexc2; c2=-c1;//調(diào)用重載單目運(yùn)算符“-”函數(shù),實(shí)現(xiàn)求復(fù)數(shù)的相反數(shù) m_Rreal=c2.display_real(); m_Rimag=c2.display_imag(); UpdateData(FALSE);}⑦編寫(xiě)退出按鈕的消息處理函數(shù),具體代碼如下:voidCFS_JisuanqiDlg::OnBUTTONExit(){ //TODO:Addyourcontrolnotificationhandlercodehere DestroyWindow();//DestroyWindow是對(duì)話框基類CWnd的一個(gè)成員函數(shù),用//來(lái)終止窗口。}5.2基于MFC的應(yīng)用程序測(cè)試運(yùn)行程序后,首先出現(xiàn)的界面如圖8所示。圖8程序初始運(yùn)行界面在復(fù)數(shù)1中輸入數(shù)據(jù),按“復(fù)制”按鈕,將復(fù)數(shù)1中的數(shù)據(jù)復(fù)制到復(fù)數(shù)2中,結(jié)果如圖9所示。圖9單擊“復(fù)制”按鈕后的界面在復(fù)數(shù)2中輸入數(shù)據(jù),單擊“+”按鈕,實(shí)現(xiàn)求解并將結(jié)果顯示出來(lái),如圖10所示。圖10單擊“+”按鈕后的界面分別單擊“-”、“*”、“/”按鈕,結(jié)果如圖11、圖12、圖13所示。圖11單擊“-”按鈕后的界面圖12單擊“*”按鈕后的界面圖13單擊“/”按鈕后的界面單擊“1:相反數(shù)”按鈕后,結(jié)果如圖14所示

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論