第一篇:C++實(shí)驗(yàn)總結(jié)報(bào)告
C++ 實(shí)驗(yàn)總結(jié)報(bào)告
研究課題:圖形編輯器
一、實(shí)驗(yàn)?zāi)康?/p>
1.熟悉C++的一些重要性質(zhì),利用封裝、繼承、虛函數(shù)和多態(tài)性等特性,通過實(shí)驗(yàn)學(xué)習(xí)如何對(duì)各類圖元的屬性和方法進(jìn)行合理的封裝 2.學(xué)習(xí)Microsoft的Visual C++編程工具 3.掌握MFC的相關(guān)知識(shí)
4.掌握基本的文件保存、讀取以及操作封裝技術(shù)
二、實(shí)驗(yàn)?zāi)康?/p>
設(shè)計(jì)一個(gè)簡(jiǎn)單的圖形編輯器
三、實(shí)驗(yàn)所用儀器、設(shè)備
計(jì)算機(jī):PentiumIII 800 以上
256M內(nèi)存 操作系統(tǒng):Windows 2000/XP 開發(fā)集成環(huán)境:Visual C++ 6.0
四、軟件功能簡(jiǎn)介
(注:此軟件是從網(wǎng)上下載得來)
該軟件具有漢化的菜單界面(仿Windows自帶畫圖軟件),具有文件打開、編輯、保存等功能。編輯部分包括可以在編輯區(qū)域畫直線、圓、矩形、曲線等矢量圖形,可插入文字,可以修改線條的線型、顏色等基本屬性。
五、部分代碼分析
1.類的初始分析:
class CDrawApp : public CWinApp { public: CDrawApp();
// Overrides virtual BOOL InitInstance();
// Implementation protected: //{{AFX_MSG(CDrawApp)afx_msg void OnAppAbout();// NOTE-the ClassWizard will add and remove member functions here.//
DO NOT EDIT what you see in these blocks of generated code!//}}AFX_MSG DECLARE_MESSAGE_MAP()};學(xué)習(xí)C++我們最需要理解的就是它面向?qū)ο蟮脑O(shè)計(jì)思想。這種思想可以在類和對(duì)象上得到充分的體現(xiàn)。
類是面向?qū)ο蟪绦蛟O(shè)計(jì)的核心,它實(shí)際上是由用戶定義的一種新的復(fù)雜數(shù)據(jù)類型。它是通過抽象數(shù)據(jù)類型ADT方法來實(shí)現(xiàn)的一種數(shù)據(jù)類型,將不同類型的數(shù)據(jù)和與這些數(shù)據(jù)相關(guān)的操作封裝在一起形成一個(gè)集合體。因此,它具有更高的抽象性,實(shí)現(xiàn)了信息的隱藏和封裝。
對(duì)象是某種類的一個(gè)實(shí)例,是類的具體體現(xiàn)。一個(gè)類可以有多個(gè)對(duì)象。
分析這一段代碼,編程者將CDrawApp();設(shè)置為公有函數(shù),這樣做就是在整個(gè)函數(shù)的外面開了一個(gè)口,使用戶可以利用這一函數(shù)處理具體問題而不必詳解函數(shù)內(nèi)部,是面向?qū)ο笾蟹庋b特性的一個(gè)具體體現(xiàn);另外,此函數(shù)中還包含了構(gòu)造函數(shù)與析構(gòu)函數(shù),構(gòu)造函數(shù)完成對(duì)新對(duì)象的初始化工作,析構(gòu)函數(shù)是構(gòu)造函數(shù)的配對(duì)物,它實(shí)現(xiàn)與構(gòu)造函數(shù)相反的功能。另外,這段代碼中還包括布爾型虛函數(shù)InitInstance(),這是函數(shù)重載,也是多態(tài)性的具體體現(xiàn)。
由這段代碼我們可以了解關(guān)于類和對(duì)象的一些知識(shí),為我們進(jìn)一步了解面向?qū)ο蟪绦蛟O(shè)計(jì)的思想精髓奠定了基礎(chǔ)。
2.對(duì)構(gòu)造函數(shù)和析構(gòu)函數(shù)的分析
構(gòu)造函數(shù)
CCreateLine::CCreateLine(): m_begin(0,0), m_end(0,0){
m_nStep = 0;// 初始化操作步為 0 }
構(gòu)造函數(shù):C++中“類”只定義了一組對(duì)象的類型。要使用這個(gè)類還必須用“類”說明它的對(duì)象,每個(gè)對(duì)象中的數(shù)據(jù)成員還必須賦初值,這些功能都是由構(gòu)造函數(shù)完成的。此造函數(shù)用初始化列表的方式對(duì)直線類的私有成員進(jìn)行初始化,同時(shí)記下操作步m_nStep是直線類從指令類中繼承來的成員,它在指令類中屬于保護(hù)成員,在直線類中則成為私有成員。這是數(shù)據(jù)共享與數(shù)據(jù)保護(hù)兩者兼顧時(shí)的一種處理方法。
析構(gòu)函數(shù)
CCreateLine::~CCreateLine(){ } 它是構(gòu)造函數(shù)的配對(duì)物,與構(gòu)造函數(shù)一樣是與類同名的成員函數(shù),并在函數(shù)名前加上一個(gè)’~’以便與構(gòu)造函數(shù)相區(qū)別。此析構(gòu)函數(shù)中沒有任何操作語句,但它并非沒有任何操作。在任何一個(gè)對(duì)象消失時(shí)都要調(diào)用本類的析構(gòu)函數(shù)進(jìn)行掃尾工作。在構(gòu)造對(duì)象時(shí),構(gòu)造函數(shù)分配資源給程序,在對(duì)象作用結(jié)束后,這些資源的釋放就要靠析構(gòu)函數(shù)。當(dāng)然析構(gòu)函數(shù)中也是可以有語句的,當(dāng)需要在對(duì)象消失之前執(zhí)行某種操作時(shí),可以把語句寫在里邊。
3.繼承和虛函數(shù)分析
class CDrawRect : public CDrawObj { protected: DECLARE_SERIAL(CDrawRect);CDrawRect();
public: CDrawRect(const CRect& position);//添加了對(duì)新數(shù)據(jù)成員的初始化
// Implementation public: virtual void Serialize(CArchive& ar);//添加了對(duì)新數(shù)據(jù)成員操作 virtual void Draw(CDC* pDC);//根據(jù)要求畫出每個(gè)圖形
virtual int GetHandleCount();//line和roundRectangle特殊處理 virtual CPoint GetHandle(int nHandle);//line和roundRectangle特殊處理
virtual HCURSOR GetHandleCursor(int nHandle);//line和roundRectangle特殊處理
virtual void MoveHandleTo(int nHandle, CPoint point, CDrawView* pView = NULL);//通過特征點(diǎn)來修改大小
virtual BOOL Intersects(const CRect& rect);//判斷與圖形是否存在相交
virtual CDrawObj* Clone(CDrawDoc* pDoc);//Clone一個(gè)新對(duì)象加入到pDoc中
protected: enum Shape { rectangle, roundRectangle, ellipse, line };Shape m_nShape;//通過枚舉變量來標(biāo)示屬于上述四種的哪一種形狀 CPoint m_roundness;// for roundRect corners
friend class CRectTool;};在閱讀此函數(shù)的源代碼過程中,我感覺到對(duì)基類中虛函數(shù)的使用對(duì)整個(gè)程序具有著十分重要的意義。正如上段代碼,它的前提是派生類CDrawRect對(duì)基類CDrawObj進(jìn)行了繼承,只有在對(duì)基類中的虛函數(shù)進(jìn)行設(shè)置后,我們才能更加高效地處理和使用基類和派生類中的方法。所以,我感覺到在學(xué)習(xí)面向?qū)ο蟪绦蛟O(shè)計(jì)時(shí),應(yīng)當(dāng)尤為注意基類中虛方法的創(chuàng)建和后期調(diào)用。
六、個(gè)人學(xué)習(xí)體會(huì)
在學(xué)習(xí)C++以前,我認(rèn)為C++只是在C語言的基礎(chǔ)上的一種延伸,認(rèn)為只要學(xué)過C語言,就可以用C語言的那種設(shè)計(jì)思想來學(xué)習(xí)C++、設(shè)計(jì)C++程序。正是由于抱了這種錯(cuò)誤的思想,使我在一開始學(xué)習(xí)C++的時(shí)候遇到了很大的困難,我沒有辦法體會(huì)面向?qū)ο蟮脑O(shè)計(jì)思想,我在學(xué)習(xí)這門課的時(shí)候老是想著實(shí)現(xiàn)這個(gè)函數(shù)功能的具體過程,而沒太注意對(duì)象分類的重要性。
隨著課程學(xué)習(xí)的深入,我感覺到了利用類和對(duì)象、繼承、封裝等一系列知識(shí)可以把我們程序中很多繁雜、重復(fù)的部分省略掉,還可以解決一些利用面向過程的設(shè)計(jì)思想無法解決的問題,我自己也試著編寫一些小的C++程序,當(dāng)然在這個(gè)過程中遇到了很多困難,其中調(diào)試帶來的困難讓我無法忘記,在調(diào)試程序的同時(shí),我也總結(jié)出來了一些調(diào)試的小技巧,讓我在C語言課程設(shè)計(jì)中也受用匪淺。
在學(xué)習(xí)這門課的過程中,我感受到了自己親自動(dòng)手編程序、調(diào)程序的重要性,我們要熟悉C++的語法、體會(huì)調(diào)試的思想,最好的一個(gè)手段就是自己動(dòng)手編程、調(diào)試,這會(huì)比我們一味的看書效果好得多。
另外,我還感覺到一個(gè)好的程序編出來需要很多人的團(tuán)結(jié)合作。我在檢查自己編寫的程序是否有BUG未被找出的時(shí)候,我會(huì)讓我的同學(xué)作為一個(gè)程序使用者來找出未發(fā)現(xiàn)的BUG并提出改進(jìn)意見,這讓我們的工作更加高效。
很高興能夠了解到C++的神奇魅力和面向?qū)ο蟪绦蛟O(shè)計(jì)的獨(dú)特思想,它為我今后的程序設(shè)計(jì)奠定了基礎(chǔ)。感謝老師對(duì)我們的悉心教授!
第二篇:C++ 實(shí)驗(yàn)一總結(jié)報(bào)告
實(shí)驗(yàn)報(bào)告
實(shí)驗(yàn)一 VC++ 6.0開發(fā)環(huán)境應(yīng)用入門 1.實(shí)驗(yàn)結(jié)果:
2.實(shí)驗(yàn)結(jié)果分析:
該程序是利用C++輸出兩句話,練習(xí)輸出格式。實(shí)驗(yàn)二 C++簡(jiǎn)單程序設(shè)計(jì)
1.實(shí)驗(yàn)結(jié)果:
2.實(shí)驗(yàn)結(jié)果分析:
求一個(gè)圖形的面積要先判斷是哪一種圖形,用switch語句就可以解決,再利用公式即可。如輸入1為圓形,再輸入邊長(zhǎng)3,利用面積公式,它的面積就是28.2744。
3.實(shí)驗(yàn)結(jié)果:
4.實(shí)驗(yàn)結(jié)果分析:
復(fù)習(xí)i++與++i的運(yùn)用。i++在當(dāng)前語句時(shí),此時(shí)i的值是沒有變化的,直到此句執(zhí)行結(jié)束,i的值才會(huì)+1;++i在當(dāng)前語句執(zhí)行之前時(shí),i的值就已經(jīng)+1。實(shí)驗(yàn)三 函數(shù)的應(yīng)用
1.實(shí)驗(yàn)結(jié)果:
2.實(shí)驗(yàn)結(jié)果分析:
函數(shù)的遞歸作用,先聲明定義一個(gè)函數(shù),輸入形參n的值,然后進(jìn)行比較,小于3的直接返回1;大于3的就繼續(xù)遞歸,直到得到的形參值小于3,返回1為止。從程序結(jié)果得知,返回n個(gè)1就最終遞歸返回n。
3.編寫一個(gè)函數(shù)把華氏溫度轉(zhuǎn)換為攝氏溫度,轉(zhuǎn)換公式為:C =(F-32)* 5/9。
4.使用系統(tǒng)函數(shù)pow(x,y)計(jì)算x的值,注意包含頭文件math.h
程序:
y
實(shí)驗(yàn)總結(jié):
1.基本掌握如何操作C++的界面,包括運(yùn)行,編譯,調(diào)試等過程;
2.學(xué)會(huì)編寫簡(jiǎn)單的C++程序,掌握基本數(shù)據(jù)類型變量和常量的應(yīng)用,運(yùn)算符與表達(dá)式的應(yīng)用;
3.學(xué)會(huì)使用VC++6.0開發(fā)環(huán)境中的debug調(diào)試功能:?jiǎn)尾綀?zhí)行、設(shè)置斷點(diǎn)、觀察變量值;熟練使用F10,F11,shift+F11,ctrl+F10等快捷鍵的使用。
4.基本掌握函數(shù)的運(yùn)用,并對(duì)C語言的復(fù)習(xí)與運(yùn)用,認(rèn)識(shí)了C++與C語言的異同。
實(shí)驗(yàn)報(bào)告
實(shí)驗(yàn)四 C++程序的結(jié)構(gòu)
一、實(shí)驗(yàn)?zāi)康?/p>
1.觀察程序運(yùn)行中變量的作用域、生存期和可見性;
2.學(xué)習(xí)類的靜態(tài)成員的使用;
3.學(xué)習(xí)多文件結(jié)構(gòu)在C++程序中的使用;
二、實(shí)驗(yàn)任務(wù)
1.運(yùn)行下面的程序,觀察變量x、y的值。
#include
cout << “Step into fn1()...” << endl;
using namespace std;
fn1();
void fn1();
cout << “Back in main” << endl;
int x = 1, y = 2;
cout << “x = ” << x << endl;
int main()
cout << “y = ” << y << endl;
{
return 0;
cout << “Begin...” << endl;
}
cout << “x = ” << x << endl;
void fn1()
cout << “y = ” << y << endl;
{
cout << “Evaluate x and y in int y = 200;main()...” << endl;
cout << “x = ” << x << endl;
int x = 10, y = 20;
cout << “y = ” << y << endl;
cout << “x = ” << x << endl;
}
cout << “y = ” << y << endl;
2.實(shí)現(xiàn)客戶機(jī)(CLIENT)類。聲明字符型靜態(tài)數(shù)據(jù)成員ServerName,保存其服務(wù)器名稱;整型靜態(tài)數(shù)據(jù)成員ClientNum,記錄已定義的客戶數(shù)量;定義靜態(tài)函數(shù)ChangeServerName()改變服務(wù)器名稱。在頭文件client.h中聲明類和實(shí)現(xiàn)類,在文件client.cpp中測(cè)試這個(gè)類,觀察相應(yīng)的成員變量取值的變化情況。
程序:
//實(shí)現(xiàn)客戶機(jī)(CLIENT)類。
#include
cout<<“Client構(gòu)造函數(shù)被調(diào)用”< Clientnum++;} ~Client(){ cout<<“Client析構(gòu)函數(shù)被調(diào)用”< Clientnum--;} static void ChangeServername(){ cout<<“請(qǐng)輸入服務(wù)器的名字:”< cin>>SeverName; } void show();};int Client::Clientnum=0;char Client::SeverName[10]=“abcd”;//Client.cpp void Client::show(){ 實(shí)驗(yàn)五 數(shù)組、指針與字符串 一、實(shí)驗(yàn)?zāi)康?cout<<“該用戶機(jī)的服務(wù)器端名字是:”< //Client.exe void main(){ Client::ChangeServername();Client a;a.show();Client::ChangeServername();Client b;b.show();Client::ChangeServername();Client c;c.show();} 1.學(xué)習(xí)使用數(shù)組數(shù)據(jù)對(duì)象; 2.學(xué)習(xí)字符串?dāng)?shù)據(jù)的組織和處理; 3.學(xué)習(xí)標(biāo)準(zhǔn)C++庫的使用; 4.掌握指針的使用方法; 5.練習(xí)通過debug觀察指針的內(nèi)容及其所指的對(duì)象的內(nèi)容; 6.練習(xí)通過動(dòng)態(tài)內(nèi)存分配實(shí)現(xiàn)動(dòng)態(tài)數(shù)組,并體會(huì)指針在其中的作用; 7.分別使用字符數(shù)組和標(biāo)準(zhǔn)C++庫練習(xí)處理字符串的方法。 二、實(shí)驗(yàn)任務(wù) 1.編寫并測(cè)試3×3矩陣轉(zhuǎn)置函數(shù),使用數(shù)組保存3×3矩陣。 程序: #include for(i=0;i<3;i++)cout<<“請(qǐng)輸入一個(gè)3*3的矩