第一篇:C++程序設(shè)計(jì)實(shí)習(xí)報(bào)告
目錄
一、實(shí)習(xí)內(nèi)容…………………………………………………………………………1
二、設(shè)計(jì)思路…………………………………………………………………………2
三、程序清單…………………………………………………………………………3
四、運(yùn)行結(jié)果…………………………………………………………………………15
五、程序使用說明……………………………………………………………………20
六、總結(jié)及心得體會(huì)…………………………………………………………………21
課程設(shè)計(jì)的題目:《小型公司工資管理系統(tǒng)》設(shè)計(jì)
設(shè)計(jì)說明:公司主要有四類人員:經(jīng)理、技術(shù)員、銷售員、銷售經(jīng)理。程序要求存儲(chǔ)這些人的職工號(hào)、姓名、月工資、年齡、性別等信息。并且應(yīng)用程序中要求給出菜單,用于選擇各項(xiàng)功能。
一、程序要求實(shí)現(xiàn)的功能即菜單目錄有:
1、數(shù)據(jù)輸入:輸入各種數(shù)據(jù);
2、數(shù)據(jù)統(tǒng)計(jì):統(tǒng)計(jì)各銷售經(jīng)理下屬銷售員的銷售額及銷售額之和;銷售經(jīng)理工資進(jìn)行冒泡排序;
3、數(shù)據(jù)打印:打印各類員工的數(shù)據(jù)信息;
4、數(shù)據(jù)備份:把各類員工的數(shù)據(jù)信息寫入文件中保存;
5、退出:退出本系統(tǒng),即結(jié)束程序的運(yùn)行。
二、工資的計(jì)算方法
A:經(jīng)理:固定月薪為8000元;B:技術(shù)員:工作時(shí)間*小時(shí)工資(100元/小時(shí));C:銷售員:銷售額* 4%提成;D:銷售經(jīng)理:底薪(5000)+所轄部門銷售額總額* 0.5%。
三、類的層次結(jié)構(gòu)大體如下
雇員類
↑
技術(shù)員類
經(jīng)理類
銷售員類
↓ 銷售經(jīng)理類
二、設(shè)計(jì)思路
1.(1)首先我們要搞清楚各類之間的繼承關(guān)系,設(shè)置基類employee,其派生類manager,technician,salesman。再以manager類為基類,再派生一個(gè)salesmanager類,將各類的數(shù)據(jù)成員設(shè)計(jì)成protected,方便派生類對(duì)基類的繼承;
(2)在public里編寫數(shù)據(jù)輸入的函數(shù),在主函數(shù)中輸出菜單并定義各類的對(duì)象,通過對(duì)象來調(diào)用數(shù)據(jù)輸入函數(shù); 2.
(1)在基類employee中補(bǔ)充幾個(gè)返回各類數(shù)據(jù)的函數(shù)以用于返回輸入的各類值;
(2)在主函數(shù)內(nèi)用冒泡法對(duì)銷售經(jīng)理的工資進(jìn)行排序,定義一個(gè)wage[]來將各銷售經(jīng)理下面的銷售員的銷售額進(jìn)行儲(chǔ)存,定義一個(gè)all用于計(jì)算銷售經(jīng)理的銷售總額,以便于下面對(duì)其進(jìn)行工資的計(jì)算 ;
(3)第2,3,4步都用大量的for循環(huán)進(jìn)行輸出,以實(shí)現(xiàn)表格的形成還有表格中數(shù)據(jù)的輸入;在主函數(shù)內(nèi)定義各類的對(duì)象,然后都是直接通過類的對(duì)象調(diào)用類內(nèi)的函數(shù),運(yùn)用for循環(huán)進(jìn)行打印,統(tǒng)計(jì); 3.
備份參照課本格式,選擇路徑及格式,運(yùn)用for循環(huán)備份;就是那個(gè)fstream之類的東西;、退出系統(tǒng)用exit(5)函數(shù)實(shí)現(xiàn);
4.主函數(shù)運(yùn)用switch語句,將上述功能編為case 1~5,每個(gè)case后添加break;5.程序結(jié)束。
以上是我所認(rèn)為的該程序的幾個(gè)要點(diǎn)…………………………………..三、程序清單
#include
//基類,雇傭者 { protected:
string name;char sex;int age;public:
virtual void display()
{
cout<<“其姓名:”;
cin>>name;cout<<“性別(m/w):”;cin>>sex;cout<<“年齡:”;
cin>>age;} string nam(){return name;} char se(){return sex;} int ag(){return age;} };
// class technician: public employee
//技術(shù)員類 { public:
int worktime;int number1;public:
void display1()
{
} int time(){return worktime;} int numb1(){return number1;} cout<<“技術(shù)員的編號(hào):”;cin>>number1;employee::display();cout<<“工作時(shí)間”;cin>>worktime;};
// class manager : public employee
//經(jīng)理類 {protected:
int number2;
public:
void display2(){
} int numb2(){return number2;} cout<<“經(jīng)理的編號(hào):”;cin>>number2;employee::display();};
// class salesman : public employee
//銷售員類 { protected:
int total;int boss;int number3;public:
};
//
class salesmanager : public manager
//銷售經(jīng)理類 {protected:
int number4;public: void display4(){ void display3(){
cout<<“銷售員的編號(hào):”;cin>>number3;employee::display();
cout<<“銷售額:”;
} int hismanager(){return boss;} int xiaoshoue(){return total;} int numb3(){return number3;} cin>>total;cout<<“所屬銷售經(jīng)理的編號(hào):”;cin>>boss;
cout<<“銷售經(jīng)理的編號(hào):”;
cin>>number4;
employee::display();} int numb4(){return number4;} };
//
void form(){ cout<<“★★小型公司工資管理系統(tǒng)★★”< 請(qǐng)選擇您所需的操作 │”< 數(shù)據(jù)輸入:1,并按回車鍵 │”< 數(shù)據(jù)統(tǒng)計(jì):2,并按回車鍵 │”< 數(shù)據(jù)打印:3,并按回車鍵 │”< 數(shù)據(jù)備份:4,并按回車鍵 │”< 退出系統(tǒng):5,并按回車鍵 │”< int main(){ int i,j,k,g,m,all,t; char shuzi; int wage[N]; technician t1[N]; //提示表格 manager m1[N]; salesman s1[2*N],s2[2*N]; salesmanager sm1[N],f; for(t=1;;t++){ form();cin>>shuzi;switch(shuzi){ case '1':{ //功能1 for(i=0;i t1[i].display1();cout<<“.......................................”< for(i=0;i m1[i].display2();cout<<“.......................................”< for(i=0;i<2*N;i++) s1[i].display3();cout<<“.......................................”< for(i=0;i sm1[i].display4();cout<<“.......................................”< //功能2 for(i=0;i cout<<“│職工號(hào) │姓名 │銷售額 │”< for(m=0;m<2*N;m++){if(s1[m].hismanager()==sm1[i].numb4()){ wage[i]=wage[i]+0.005*(s1[m].xiaoshoue());all=all+s1[m].xiaoshoue(); cout<<“├─────┼────┼─────┤”< cout<<“├─────┼────┴─────┤”< cout<<“│銷售額總計(jì)│”< for(j=0;j for(k=0;k if(wage[k] //冒泡 wage[k]=wage[k+1];wage[k+1]=t;f=sm1[k];sm1[k]=sm1[k+1];sm1[k+1]=f;} cout<<“銷售經(jīng)理按工資排序?yàn)椋骸? │姓名 │性別 │年齡 │工資 │”< │ ”< │”< break; //功能3 case '3': cout<<“請(qǐng)等待............”< cout<<“┌─────┬────┬────┬────┬────┐”< cout<<“│職工號(hào) │姓名 │性別 │年齡 │工資 │”< for(i=0;i │ ”< │”< cout<<”.......................................................“< cout<<”┌─────┬────┬────┬────┬────┐“< cout<<”│職工號(hào) │姓名 │性別 │年齡 │工資 │“< for(i=0;i │ “< │“< } cout<<”└─────┴────┴────┴────┴────┘“< //經(jīng)理表 cout<<”.......................................................“< cout<<”┌─────┬────┬────┬────┬────┐“< cout<<”│職工號(hào) │姓名 │性別 │年齡 │工資 │“< for(g=0;g cout<<”├─────┼────┼────┼────┼────┤“< cout<<” │ “< “< ││“< cout<<”└─────┴────┴────┴────┴────┘“< //銷售經(jīng)理表 cout<<”銷售員“< cout<<”┌─────┬────┬────┬────┬────┬────────┐“< cout<<”│職工號(hào) │姓名 │性別 │年齡 │工資 │所屬部門經(jīng)理編號(hào)│“< for(i=0;i<(2*N);i++){ cout<<”├─────┼────┼────┼────┼────┼────────┤“< │ “< │“< ────────┘“< //經(jīng)理表 cout<<”...............................................................................“< break;case '4': cout<<”數(shù)據(jù)備份“< outfile.open(”E:sjq.txt“,ios::in|ios::out|ios::trunc); outfile<<”技術(shù)員“< outfile<<”┌─────┬────┬────┬────┬────┐“< outfile<<”│職工號(hào) │姓名 │性別 │年齡 │工資 │“< for(i=0;i │ “< │“< outfile<<”.......................................................“< outfile<<”┌─────┬────┬────┬────┬────┐“< outfile<<”│職工號(hào) │姓名 │性別 │年齡 │工資 │“< for(i=0;i │ │ “< “< ││“< } outfile<<”└─────┴────┴────┴────┴────┘“< //經(jīng)理表 outfile<<”.......................................................“< outfile<<”┌─────┬────┬────┬────┬────┐“< outfile<<”│職工號(hào) │姓名 │性別 │年齡 │工資 │“< for(g=0;g { outfile<<”├─────┼────┼────┼────┼────┤“< outfile<<” │ “< “< ││“< outfile<<”└─────┴────┴────┴────┴────┘“< //銷售經(jīng)理表 outfile<<”銷售員“< outfile<<”┌─────┬────┬────┬────┬────┬────────┐“< outfile<<”│職工號(hào) │姓名 │性別 │年齡 │工資 │所屬部門經(jīng)理編號(hào)│“< for(i=0;i<(2*N);i++){ outfile<<”├─────┼────┼────┼────┼────┼────────┤“< │ “< │“< ┴────────┘“< //經(jīng)理表 outfile<<”...............................................................................“< case '5':cout<<”確定退出系統(tǒng)嗎?“< cout<<”是:1,否:2“< default :cout<<”error"< } return 0;} } 四、運(yùn)行結(jié)果 數(shù)據(jù)備份內(nèi)容…………………………………………….1.從鍵盤輸入1,按回車鍵,可進(jìn)行各類數(shù)據(jù)的輸入,此步驟必須執(zhí)行; 2.從鍵盤輸入2,按回車鍵,即可進(jìn)行數(shù)據(jù)統(tǒng)計(jì),得到統(tǒng)計(jì)列表; 3.從鍵盤輸入3,按回車鍵,可打印出各類成員的基本信息; 4.從鍵盤輸入4,按回車鍵,可進(jìn)行數(shù)據(jù)備份; 5.從鍵盤輸入5,按回車鍵,出現(xiàn)提示信息,若退出系統(tǒng)輸入1否則輸入2。 六、總結(jié)及心得體會(huì) 從9月2號(hào),我們開始了為期一周的C++程序設(shè)計(jì)實(shí)習(xí)——《小型工資管理系統(tǒng)》,每天下午去機(jī)房調(diào)試程序,上午編寫下一天的程序代碼。 剛開始的時(shí)候,腦袋里一點(diǎn)思路都沒有,因?yàn)橐郧皼]有接觸過這么大的程序。所以剛開始的時(shí)候,心里只有一個(gè)字能形容就是怕。怕自己便不好,怕這門課程完成不了,很多很多。去做一件事情,最忌諱的就是這一點(diǎn)。失敗者和成功者最大的區(qū)別就是面對(duì)困難時(shí)的心態(tài),我深知這一點(diǎn)。所以,我沉下心來思考了很多。做一個(gè)程序,最重要的就是大體思路,得有全局的思考,我承認(rèn),這一點(diǎn)我做的不是很好,因?yàn)槲业?天的程序做了大改動(dòng),也許是我基本功不扎實(shí),但是我所能想到的就是大改動(dòng)了,可能有其他簡(jiǎn)便的方法,所以這對(duì)于我而言,是一個(gè)重大的警告。在第二天的晚上,我花了一晚的時(shí)間來重新整理思路,以防止在接下來的幾天里再出現(xiàn)那樣的錯(cuò)誤,那就很讓人糾結(jié)了。第1天時(shí)完成數(shù)據(jù)的輸入以及類的設(shè)計(jì)。這個(gè)還不是很難,就是定義一個(gè)基類employee,然后派生下來幾個(gè)子類。然后在類內(nèi)編寫返回值的函數(shù),以及數(shù)據(jù)輸入的函數(shù)等等,數(shù)據(jù)成員都設(shè)置成protected。在類外在編幾個(gè)數(shù)組,用來調(diào)用類內(nèi)函數(shù)。 第2天是完成數(shù)據(jù)統(tǒng)計(jì),排序功能。排序的話用冒泡法,用數(shù)組進(jìn)行數(shù)據(jù)的排序。但是問題出現(xiàn)了,第一天我是把輸入功能獨(dú)立變成一個(gè)void函數(shù)在主函數(shù)前面的,但是我發(fā)現(xiàn)數(shù)據(jù)無法存儲(chǔ)下來。所以第2天我就把第一步的內(nèi)容全改了,搬到了類內(nèi),這樣才解決了問題。 第三天時(shí)完成數(shù)據(jù)的輸出顯示,這個(gè)地方的難點(diǎn)就是設(shè)計(jì)表格,這個(gè)就涉及到了那個(gè)輸入內(nèi)容寬度的設(shè)計(jì),以及制表鍵盤的。然后數(shù)據(jù)的輸出就是在主函數(shù)內(nèi)定義類對(duì)象數(shù)組,以此來實(shí)現(xiàn)數(shù)據(jù)的調(diào)用。 然后剩下的就是備份以及推出功能的實(shí)現(xiàn)了。這些都是在網(wǎng)上查了相關(guān)資料然后學(xué)會(huì)如何編寫的,剛開始覺得很深?yuàn)W,學(xué)了之后,就覺得,嗯,還行。所以其他的任務(wù)在半天內(nèi)就完成了。看著自己編出的程序,真心覺得一切都值了,很有成就感的樣子,我想這就是編程員的歡喜吧。整個(gè)實(shí)習(xí)過程讓我明白了幾點(diǎn): 1.設(shè)計(jì)一個(gè)程序時(shí)需要從整體考慮,不能分散到最后結(jié)合不到一起; 2.有些貌似簡(jiǎn)單的功能的實(shí)現(xiàn)其程序?qū)崿F(xiàn)不一定簡(jiǎn)單,但也不能畏首畏尾,不敢嘗試,要勇于挑戰(zhàn)自己,相信自己一定可以; 3. 1.需要具有刻苦鉆研的精神,注意總結(jié),遇到問題認(rèn)真思考,力求得到結(jié)果; 2.同時(shí)也不能忽略團(tuán)隊(duì)的力量,遇到實(shí)在個(gè)人解決不了的問題可以通過與同學(xué)商量解決,并且結(jié)合別人和自己的觀點(diǎn),從多方面考慮,在眾多方案中找出最優(yōu)化的; 3.遇到一些問題時(shí)要有耐心進(jìn)行更正,因?yàn)榭赡苡袝r(shí)候一個(gè)很小的錯(cuò)誤會(huì)導(dǎo)致整個(gè)程序運(yùn)行失常。 我感覺這一周的實(shí)習(xí)非常充實(shí),謝謝這一周給我指導(dǎo)的老師,以及各位同學(xué)的陪伴。 第一章面向?qū)ο缶幊淘?/p> ?近五十年間,軟件技術(shù)經(jīng)歷了多個(gè)階段的發(fā)展演變 ? 目前為止最流行的技術(shù)還是面向過程編程(POP) ? 面向過程編程采用了自頂向下的設(shè)計(jì)方案,問題被看做多個(gè)執(zhí)行任務(wù)的序列。為完成這些任務(wù),須實(shí)現(xiàn)一些函數(shù)。 ? 面向過程有兩大不足,即:(1)數(shù)據(jù)可在程序內(nèi)自由遷移,程序內(nèi)任何函數(shù)都會(huì)引起數(shù)據(jù)的更改,增加了數(shù)據(jù)的脆弱性。(2)它并不能很好地建模現(xiàn)實(shí)世界。 ? 為了克服面向過程編程中的不足,人們發(fā)明了面向?qū)ο缶幊蹋∣OP)。它采用自底向上的編程方案,在程序開發(fā)中,把數(shù)據(jù)視為重要元素,不允許數(shù)據(jù)在系統(tǒng)內(nèi)自由遷移。它還將數(shù)據(jù)和函數(shù)緊密綁定于成為類的數(shù)據(jù)結(jié)構(gòu)中,函數(shù)可操作類中的數(shù)據(jù)。此特性稱為數(shù)據(jù)封裝。 ? 在面向?qū)ο缶幊讨校瑔栴}被視為一系列稱為對(duì)象的實(shí)體的集合。對(duì)象是類的實(shí)例; ? 將數(shù)據(jù)與程序的直接訪問隔絕,這稱為數(shù)據(jù)隱藏。 ? 數(shù)據(jù)抽象指的是,將各種必要特性合并,而不引入背景細(xì)節(jié)。? 繼承是這樣的一個(gè)過程,即某類的對(duì)象得到另一類對(duì)象的屬性。 ? 多態(tài)指的是,一個(gè)名稱,多種形態(tài)。在程序中,我們可以借此定義多個(gè)同名函數(shù)。此特性亦可重載運(yùn)算符,這樣一來,同一個(gè)運(yùn)算符在不同的實(shí)例下,會(huì)有不同的行為。? 動(dòng)態(tài)綁定指的是,給定過程的代碼,直到運(yùn)行期被調(diào)用時(shí)才確定。? 消息傳遞涉及對(duì)象名,函數(shù)(消息)名以及發(fā)送的信息。 ? 與傳統(tǒng)的編程技術(shù)相比,面向?qū)ο蠹夹g(shù)具有諸多優(yōu)勢(shì)——最顯著的當(dāng)屬重用技術(shù)。? 在實(shí)時(shí)系統(tǒng)等幾乎所有的計(jì)算機(jī)領(lǐng)域,面向?qū)ο缶幊痰膽?yīng)用程序都已受到重視。? 不少語言都支持面向?qū)ο缶幊蹋餍械恼Z言包括C++、Smalltalk和Java。 第二章C++入門 ? C++是C語言的超級(jí) ? C++在C語言的基礎(chǔ)上,添加了一些面向?qū)ο蟮奶匦裕T如對(duì)象、繼承、函數(shù)重載和運(yùn)算符重載。這些特性加強(qiáng)了程序的清晰性,可擴(kuò)展性,使程序容易維護(hù)。 ? C++可用于開發(fā)各種系統(tǒng),諸如編輯器、編譯器、數(shù)據(jù)庫、通信系統(tǒng)以及其他更多復(fù)雜的實(shí)際系統(tǒng)。 ? C++支持交互式輸入輸出,并引入了新的注釋符號(hào)//,可用于注釋單句。它也支持C語言的注釋風(fēng)格。 ? 和C程序一樣,所有C++程序的執(zhí)行入口都是main()函數(shù),并以return()語句作為結(jié)束。頭文件iostream應(yīng)包含于所有使用輸入輸出操作的程序開頭。? 所有標(biāo)準(zhǔn)C++程序都要包含using namespace std指令 ? 典型的C++程序包括四個(gè)基本部分:也就是頭文件包含部分、類聲明部分、成員函數(shù)部分和主程序部分 ? 和C程序一樣,C++程序可用于任何文本編輯器創(chuàng)建 ? 大多數(shù)編譯器提供了集成開發(fā)運(yùn)行環(huán)境。流行的編譯器系統(tǒng)有UNIX AT&T C++、Turbo C++和微軟公司的Visual C++ 第三章符號(hào)、表達(dá)式和控制結(jié)構(gòu) ? C++有不同的符號(hào),包括關(guān)鍵字、標(biāo)識(shí)符、常量、字符串和操作符 ? 標(biāo)識(shí)符指的是變量名、函數(shù)名、數(shù)組名、類名等 ? C++中增加了void的一個(gè)用途,可用于聲明通用指針 ? C++中枚舉數(shù)據(jù)類型略有不同,枚舉類型名稱為新的類型名。這樣我們就可以聲明枚舉類型的變量 ? 在C++中,字符數(shù)組的大小應(yīng)比字符串的實(shí)際長度大1 ? C++增加了指針常量和常量指針的概念,對(duì)于前者我們不能修改賦予它的地址值,對(duì)于后者,我們不能修改它指向的內(nèi)容。 ? 在C++的內(nèi)存管理和多態(tài)實(shí)現(xiàn)中,指針被廣泛地使用。 ? C++中提供了const修飾符,用于聲明常量,常量也是變量,只是其值不可變更。const修飾符默認(rèn)修飾整型。 ? C++的變量類型檢查非常嚴(yán)格,它不允許不同類型變量之間的賦值。類型轉(zhuǎn)換是打破此規(guī)的唯一辦法。 ? C++允許我們?cè)诔绦蛑须S處聲明變量,而且可以利用聲明處的表達(dá)式,在運(yùn)行期完成初始化。 ? 引用變量給之前定義的變量提供了一個(gè)別名。它們都指向內(nèi)存中的同一個(gè)數(shù)據(jù)對(duì)象。所以,改變其中一個(gè)的值,另一邊量的值也會(huì)隨之改變。 ? 引用變量必須在聲明時(shí)初始化,這建立了它和要引用的變量之間的對(duì)應(yīng)關(guān)系。? 作用于解析操作符(::)的主要用于類,以識(shí)別成員函數(shù)所屬的類 ? 除了malloc()、calloc()、free()函數(shù)外,C++提供了兩個(gè)一元操作符,即new和delete,以更好和更方便地分配和釋放內(nèi)存 ? C++也提供了操縱器,來格式化輸出數(shù)據(jù)。最常用的操縱器為endl和setw ? C++支持七種表達(dá)式類型。表達(dá)式中數(shù)據(jù)類型混用時(shí),C++使用特定規(guī)則,自動(dòng)地進(jìn)行類型轉(zhuǎn)換。 ? 使用類型轉(zhuǎn)換操作符,C++也可顯示地進(jìn)行變量和表達(dá)式的類型轉(zhuǎn)換 ? 和C語言一樣,C++也支持三種基本的控制結(jié)構(gòu),也就是順序結(jié)構(gòu),分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu),并使用各種控制語句實(shí)現(xiàn)它們,比如if、if…else、switch、do…while、while以及for。 第四章C++中的函數(shù) ? 在程序的不同處,調(diào)用函數(shù)可減少程序的大小。 ? 在C++中,main()函數(shù)向操作系統(tǒng)返回一個(gè)整型值。因?yàn)楹瘮?shù)的返回值類型默認(rèn)是整型,所以main()函數(shù)中的關(guān)鍵字int是可選的。而如果沒有返回語句,大部分C++編譯器會(huì)提示一個(gè)警告。 ? 函數(shù)原型向編譯器提供了函數(shù)的細(xì)節(jié),比如參數(shù)的數(shù)目和類型,以及返回值的類型。? C++的引用變量使我們可以傳引用參數(shù)給函數(shù)。函數(shù)也可以返回引用變量。 ? 當(dāng)函數(shù)聲明為內(nèi)聯(lián)時(shí),編譯器用相應(yīng)的函數(shù)代碼替換了函數(shù)調(diào)用。一般情況下,小函數(shù)才使用內(nèi)聯(lián)。 ? 編譯器可能會(huì)忽略函數(shù)的內(nèi)聯(lián)聲明,如果函數(shù)聲明太長或過于復(fù)雜,編譯器將按常規(guī)函數(shù)編譯它。 ? 當(dāng)函數(shù)聲明時(shí),C++允許我們把默認(rèn)值賦給函數(shù)參數(shù)。這種情況下,我們可以無需指明所有參數(shù),便可調(diào)用函數(shù)。默認(rèn)參數(shù)總是由右到左添加。? C++中,函數(shù)的參數(shù)可聲明為常量,表示函數(shù)不可更改此變量。 ? C++允許函數(shù)重載,也就是說,我們可以定義多個(gè)同名函數(shù)。通過檢查參數(shù)數(shù)目和類型編譯器會(huì)準(zhǔn)確地匹配函數(shù)調(diào)用和函數(shù)代碼。 ? C++支持兩種新的函數(shù)類型,亦即友元函數(shù)和虛函數(shù)。 ? C++標(biāo)準(zhǔn)庫支持很多數(shù)學(xué)庫函數(shù),使用它們可以完成許多數(shù)學(xué)計(jì)算。 第五章 類和對(duì)象 ? 類是結(jié)構(gòu)體數(shù)據(jù)類型的擴(kuò)展,一個(gè)類有多個(gè)成員變量和成員函數(shù)。? 默認(rèn)情況下,類的成員是私有的,而結(jié)構(gòu)體的成員是公用的。 ? 只有成員函數(shù)可以訪問私有數(shù)據(jù)成員和私有函數(shù)。但是類外可以訪問公用成員。? 在C++中,類變量稱為對(duì)象。利用對(duì)象并使用點(diǎn)操作符,我們可以訪問類的公用成員。? 我們可以在類內(nèi)或類外定義成員函數(shù)。成員函數(shù)和常規(guī)函數(shù)的區(qū)別在于,成員函數(shù)的頭 部有一個(gè)隸屬標(biāo)識(shí)符,以表明所屬類。 ? 對(duì)象聲明時(shí),內(nèi)存空間才會(huì)分配。每一對(duì)象的成員變量空間單獨(dú)分配,而成員函數(shù)的空間則統(tǒng)一分配。 ? 類的一個(gè)成員變量可聲明為靜態(tài)成員,一般用于維護(hù)整個(gè)類的通用值。? 靜態(tài)成員變量必須定義于類外。 ? 靜態(tài)成員函數(shù)可訪問聲明在同類的靜態(tài)成員,調(diào)用靜態(tài)成員函數(shù)時(shí)需要用到類名。? C++允許我們使用對(duì)象數(shù)組。? 對(duì)象可用作函數(shù)自變量。 ? 友元函數(shù)不在友元聲明類的作用域類,它可以訪問累的所有私有數(shù)據(jù)。? 函數(shù)可以返回對(duì)象。 ? 如果成員函數(shù)不改變類內(nèi)的任何數(shù)據(jù),我們可以將其聲明為常量成員函數(shù),只要在函數(shù)原型中加上關(guān)鍵詞const(聲明和定義都要加)。 ? 我們也可以在函數(shù)內(nèi)定義和使用類。這種類稱為局部類。 第六章構(gòu)造函數(shù)和析構(gòu)函數(shù) ? C++提供了一種稱為構(gòu)造函數(shù)的特殊成員函數(shù),它能幫助對(duì)象在創(chuàng)建時(shí)完成初始化。這一過程被稱為對(duì)象的自動(dòng)初始化。? 構(gòu)造函數(shù)名和類名一致。 ? 構(gòu)造函數(shù)通常用來初始化變量,以及分配內(nèi)存。? 和常規(guī)函數(shù)一樣,構(gòu)造函數(shù)也可以被重載。 ? 當(dāng)對(duì)象同時(shí)被創(chuàng)建和初始化時(shí),復(fù)制構(gòu)造函數(shù)被調(diào)用。? 我們可以聲明一個(gè)常量對(duì)象,其數(shù)據(jù)值不能改變。 ? C++還提供另一種成員函數(shù),稱為析構(gòu)函數(shù)。當(dāng)對(duì)象不再需要時(shí),會(huì)調(diào)用這種函數(shù)來銷毀對(duì)象。 第七章運(yùn)算符重載和類型轉(zhuǎn)換 ? 運(yùn)算符重載是C++的重要特性之一。又被稱為編譯時(shí)多態(tài)性。 ? 使用重載特性,我們可以對(duì)兩個(gè)用戶自定義數(shù)據(jù)類型,比如說對(duì)象,執(zhí)行相加的操作,使用的語法就和基本數(shù)據(jù)類型一樣。 ? 我們可以重載幾乎所有C++的運(yùn)算符,下面幾個(gè)是例外: ? 類成員訪問符(.,.*)。? 作用域解析符(::)。 ? 大小運(yùn)算符(sizeof)。? 條件運(yùn)算符(?:)。 ? 運(yùn)算符重載是通過一種稱為運(yùn)算符函數(shù)的特殊函數(shù)完成的,該函數(shù)定義了運(yùn)算符的特定任務(wù)。 ? 運(yùn)算符重載時(shí)有一些限制。運(yùn)算符函數(shù)必須是非靜態(tài)的成員函數(shù)或者友元函數(shù)。重載的運(yùn)算符必須有至少一個(gè)用戶自定義類型的操作數(shù)。 ? 編譯器不支持用戶自定義數(shù)據(jù)類型的自動(dòng)類型轉(zhuǎn)換,我們可以使用自定義的轉(zhuǎn)換運(yùn)算符函數(shù),以實(shí)現(xiàn)自定義數(shù)據(jù)類型的自動(dòng)類型轉(zhuǎn)換。? 轉(zhuǎn)換運(yùn)算符函數(shù)應(yīng)符合下列條件: ? 必須是類成員。? 必須不指定返回值。? 必須沒有參數(shù)。 第八章繼承:類的擴(kuò)展 ? 從舊類派生一個(gè)新類的機(jī)制被稱為繼承。繼承提供了可重用性的概念。通過繼承,C++的類可以被重用。 ? 派生類繼承了基類的一部分或所有特性。? 只有一個(gè)基類的派生類被稱為單繼承。? 可從多個(gè)類繼承,這被稱為多繼承。? 可從另一派生類繼承類,這被稱為多級(jí)繼承。 ? 當(dāng)某類的屬性被多于一個(gè)類繼承時(shí),這被稱為層次繼承。? 不管是在公用模式還是私有模式,類的私有成員都不可被繼承。 ? 以公用模式繼承的保護(hù)成員仍為派生類的保護(hù)成員,而以私有模式繼承的保護(hù)成員,則變成派生類的私有成員。 ? 友元函數(shù)和友元類的成員函數(shù)可直接訪問私有和保護(hù)數(shù)據(jù)。 ? 派生類的成員函數(shù)只能直接訪問保護(hù)和公用數(shù)據(jù)。不過他們可通過基類的成員函數(shù)訪問私有數(shù)據(jù)。 ? 多路繼承可能引起祖父基類的繼承成員的重復(fù)。通過將共同的基類設(shè)為虛基類,我們可以避免祖父基類成員的重復(fù)。 ? 在多繼承中,基類的創(chuàng)建次序與他們?cè)谂缮愔械穆暶鞔涡蛞恢隆? 類可包含其他類的對(duì)象。這被稱為包含關(guān)系或嵌套。 注意:以下藍(lán)色文字部分根據(jù)情況增刪 實(shí)驗(yàn)1熟悉VC++6.0集成開發(fā)環(huán)境 一、實(shí)驗(yàn)時(shí)間: 2011年9月20日 二、實(shí)驗(yàn)地點(diǎn): 第7機(jī)房 三、指導(dǎo)教師: 鄧譜 四、實(shí)驗(yàn)?zāi)康模?/p> 1.了解VC++6.0的主要特點(diǎn); 2.熟悉VC++6.0的集成開發(fā)環(huán)境; 3.學(xué)習(xí)用VC++6.0編寫簡(jiǎn)單的C++應(yīng)用程序,掌握C++程序的上機(jī)調(diào)試步驟。 五、實(shí)驗(yàn)內(nèi)容: 1.P19 第1題:在屏幕上輸出字符串“歡迎大家學(xué)習(xí)VC++6.0!” ? 【編程思想】 ? 【流程圖】 ? 【源程序】見上機(jī)作業(yè)“實(shí)驗(yàn)11_11_1.cpp” 問題1:不知道如何在VC++6.0里輸入源程序 解決方法: (1)首先建立“Win32 Console Application”工程; (2)再向工程中添加源文件; (3)在添加的源文件中輸入代碼。 以上的詳細(xì)操作流程見“Visual C++ 6.0集成開發(fā)環(huán)境.doc”文件。 問題2:error LNK2001: unresolved external symbol _WinMain@16:連接錯(cuò)誤2001:未解決的外部符號(hào)_WinMain@16 問題原因:創(chuàng)建工程時(shí)選的創(chuàng)建“Win32 Application”,這是創(chuàng)建圖形用戶界面的C++工程,而程序是字符界面,兩者不一致導(dǎo)致該錯(cuò)誤。 解決方法:創(chuàng)建工程時(shí)應(yīng)選“Win32 Console Application” 問題3:error C1010: unexpected end of file while looking for precompiled header directive:錯(cuò)誤C1010:在查找預(yù)編譯頭時(shí)遇到意外的文件結(jié)尾。 問題原因:在選擇創(chuàng)建工程種類時(shí)選擇了“a simple application”,該工程還包含stdafx..h和stdafx..cpp兩個(gè)文件,這兩個(gè)文件是為編譯系統(tǒng)進(jìn)行預(yù)編譯服務(wù)的,需要在源程序開始部分使用#include “stdafx.h”進(jìn)行引用,如果未進(jìn)行引用,會(huì)導(dǎo)致該錯(cuò)誤。 解決方法1:在選擇創(chuàng)建工程種類時(shí)選擇第一項(xiàng)“an empty project” 解決方法2:如果工程文件列表中(窗口左邊)有stdafx..h和stdafx..cpp兩個(gè)文件,則源程序開始要使用#include “stdafx.h”進(jìn)行引用。 問題4:error C2143: syntax error : missing ';' before '}':錯(cuò)誤C2143:語法錯(cuò)誤:在'}'之前丟失了';' 問題5:…… 2.P19 第2題:求兩個(gè)整數(shù)之和 …… 六、實(shí)驗(yàn)總結(jié): (將實(shí)驗(yàn)過程中或?qū)W習(xí)本章節(jié)的上機(jī)過程中值得記錄的內(nèi)容按1.2.3.分條寫下來) 1構(gòu)造一個(gè)類,含有3個(gè)數(shù)據(jù)成員,為長方體的長、寬、高,含有一個(gè)成員函數(shù),用來計(jì)算長方體的體積 #include “stdafx.h” #include a=x;b=y;c=z;} double volu(void){ return a*b*c;} };int main(int argc, char* argv[]){ cub cuba;cuba.setabc(3,4,5);cout<<“cuba的體積為:”< a=x;b=y;c=z;} double average(void){ return(a+b+c)/3;} void show(void){ cout<<“數(shù)學(xué)、物理、英語成績(jī)分別是:”< cout<<“平均成績(jī)是:”< stu Yin;Yin.setabc(80,81,82);cout<<“張三的成績(jī)表:”< //拷貝 { radius=t.radius;} double peri(void){return 2*pI*radius;} double area(void){return pI*radius*radius;} void show(void){cout<<“圓形的半徑為:”< cout<<“圓形的周長為:”< cout<<“圓形的面積為:”< cout<<“circlea的參數(shù)是:”< circle circlea(3);circle circleb(circlea); circlea.show(); cout<<“circleb的參數(shù)是:”< a=x;b=y; } double area(void){ return a*b;} void showA(void){ cout<<“長方形的邊長是:”< cout<<“長方形的面積是:”< class Cub:public Rect { private: double H;public: Cub(double x,double y,double h):Rect(x,y){H=h;} double volume(){return area()*H;} double Aarea()//表面積 {return(2*a*b+2*b*H+2*b*H);} void showB(void){ cout<<“長方體的高是:”< cout<<“長方體的表面積是:”< cout<<“長方體的體積是:”< void main(int argc, char* argv[]){ Cub abc(3,4,4);cout<<“長方形的參數(shù)是:”< a=x;b=y;r=z;} double area1()//圓的面積 { return PI*r*r; } double area2(){ return a*b;} //長方形面積 void showA(){ cout<<“圓的半徑為”< cout<<“圓的面積為”< cout<<“長方形的邊長為”< cout<<“長方形的面積為”< class sphere:public shape //圓類 { public: sphere(double z):shape(0,0,z) { } double Aarea1() { return 4*PI*r*r; } double volume1() { return(4*PI*r*r*r)/3; } void showC(void) { cout<<“球的表面積為:”< cout<<“球的體積為:”< } };class cube:public shape //長方體類 { private: double h;public: cube(double x,double y,double z):shape(x,y,z) { h=z;} double Aarea2() { return 2*(a*b+a*h+b*h); } double volume2() { return area2()*h; } void showD(void) { cout<<“長方體的高為:”< cout<<“長方體的表面積為:”< cout<<“長方體的體積為:”< } }; void main(int argc, char* argv[]){ sphere yuan(1); cout<<“球類的參數(shù)是:”< yuan.showA(); //abc.showB(); yuan.showC(); cube chang(1,2,3); cout<<“長方體的參數(shù)是:”< chang.showB(); chang.showD();} 四則運(yùn)算: #include switch(Opr) { case '+': return D1+D2;break; case '-': return D1-D2;break; case '*': return D1*D2;break; case '/': if(D2!=0)return D1/D2; else{ cout<<“分母為0”< default: { cout<<“非法 Opr”< } } } void SetOpr(char opr){ switch(opr){ case '+': case '-': case '*': case '/': Opr=opr;break;default:Opr='
主站蜘蛛池模板:
高清人人天天夜夜曰狠狠狠狠|
肉体裸交丰满丰满少妇在线观看|
免费va国产高清大片在线|
成年女人免费大片视频|
国产中年熟女高潮大集合|
国产高跟黑色丝袜在线|
精品国产免费人成电影在线看|
无码专区无码专区视频网站|
狠狠狠色丁香综合婷婷久久|
国产精品福利一区二区久久|
亚洲永久精品ww47永久入口|
亚洲精品无码人妻无码|
亚洲性夜夜天天天|
亚洲综合欧美在线一区在线播放|
人人做人碰人人添|
西西人体午夜视频无码|
欧美日韩亚洲tv不卡久久|
久久国产加勒比精品无码|
97人人添人澡人人爽超碰|
精品少妇人妻av免费久久久|
免费无码又爽又黄又刺激网站|
在线观看国产精品av|
超清纯白嫩大学生无码网站|
国产av剧情md精品麻豆|
亚洲日韩国产二区无码|
亚洲精品无码av人在线观看国产|
国产suv精品一区二区四|
色情无码一区二区三区|
久久棈精品久久久久久噜噜|
色宅男看片午夜大片啪啪|
久久欧美与黑人双交男男|
亚洲欧美日韩国产成人精品影院|
欧美成人一区二区三区|
午夜福利理论片在线观看|
成年男人午夜片|
亚洲av久久久噜噜噜噜|
无码潮喷a片无码高潮视频|
久久无码无码久久综合综合|
久久国产加勒比精品无码|
国色天香网www在线观看|
无码三级国产三级在线电影|
第二篇:C++程序設(shè)計(jì)總結(jié)
第三篇:《C++程序設(shè)計(jì)》實(shí)驗(yàn)報(bào)告范例
第四篇:c++程序設(shè)計(jì)教案(朱紅)