21、 void setXX(double f) XX=f; double getXX() return XX; double RealSalary() //計算實發(fā)工資Private:Bouble Wage, Subsidy, Rent, WaterFee, ElecFee;;其中,成員函數(shù)setXX()用于設(shè)置工資的各分項數(shù)據(jù),成員函數(shù)getXX()用于獲取工資的各分項數(shù)據(jù),XX代表Wage、Subsidy等數(shù)據(jù)成員,如Wage對應(yīng)的成員函數(shù)則為setWage()和getWage()。實發(fā)工資=Wage+Subsidy-Rent-WaterFee-ElecFee編程完善該類的設(shè)計,并在主函數(shù)中
22、測試該類的各成員函數(shù)。4設(shè)計一個時鐘類Clock。數(shù)據(jù)成員包括hour(小時)、minute(分鐘)、second(秒)。要 求用成員函數(shù)實現(xiàn)以下功能:(1)創(chuàng)建具有指定時鐘(小時、分鐘、秒)的Clock對象,默認(rèn)時鐘為00:00:00。(2)動態(tài)地設(shè)置時、分、秒。(3)在屏幕上按“時:分:秒”的格式顯示時鐘。(4)在主函數(shù)中測試該類。 5設(shè)計一個職工類Employee。數(shù)據(jù)成員包括字符串型的name(姓名)、street(街道地址)、city(市)、province(?。?、postalcode(郵政編碼)。要求用成員函數(shù)實現(xiàn)以下功能:(1)創(chuàng)建職工對象時,可以按不同方式指定職工信息。(2)動
23、態(tài)地設(shè)置職工對象信息。(3)在屏幕上打印職工信息。(4)在主函數(shù)中測試該類。6需要求3個三角形的體積,請編寫一個基于對象的程序。數(shù)據(jù)成員包括三角形的三邊長a、b、 c。要求用成員函數(shù)實現(xiàn)以下功能:(1) 定義構(gòu)造函數(shù)完成長方柱的初始化;(2) 求三角形的周長;(3) 求三角形的面積;(4) 輸出三角形信息。7下面是一個整型數(shù)組類intArray的聲明,請給出該類所有數(shù)據(jù)成員的類外定義。 class intArraypublic:intArray(int size);//構(gòu)造函數(shù)intArray(const intArray //復(fù)制構(gòu)造函數(shù)intArray();//析構(gòu)函數(shù)bool Set(i
24、nt i, int elem);//設(shè)置第i個數(shù)組元素的值,設(shè)置成功返回true,失敗返回falsebool Get(int i, int //獲取第i個數(shù)組元素的值,獲取成功返回true,失敗返回falseint Length( ) const;//獲取數(shù)組的長度void ReSize ( int size ); //重置數(shù)組void Print();//輸出數(shù)組private:int *element; //指向動態(tài)數(shù)組的指針int arraysize; //數(shù)組的當(dāng)前長度 ;8下面是一個整型鏈表類intList的聲明,請給出該類所有數(shù)據(jù)成員的類外定義。class intListprote
25、cted:struct NodeNode * next;int data;;Node * pFirst;public:intList();//構(gòu)造函數(shù)intList(); //析構(gòu)函數(shù)//向鏈表的第i個位置插入一個元素,插入成功返回true,失敗返回false bool Insert(int i, int elem) ;//刪除鏈表的第i個位置的元素,刪除成功返回true,失敗返回falsebool Remove(int i, int int * Find(int elem)const; //查找值為elem的元素,返回指向該元素的指針int Length( ) const;//返回鏈表長度
26、void Printlist();//輸出鏈表;9下面是一個整型堆棧類intStack的聲明,請給出該類所有數(shù)據(jù)成員的類外定義。class intStackpublic:intStack (int size=10);//構(gòu)造函數(shù)intStack ();//析構(gòu)函數(shù)bool Push(int elem);//入棧操作bool Pop(int //出棧操作int Length( ) const; //獲取棧中元素的個數(shù)private:int *data; //指向動態(tài)數(shù)組的指針int top; //棧頂指針 int size; //堆棧的容量;實驗四、繼承與組合(6學(xué)時)一、實驗?zāi)康?了解繼承在面
27、向?qū)ο蟪绦蛟O(shè)計中的重要作用。2進一步理解繼承與派生的概念。3掌握通過繼承派生出一個新的類的方法。4了解虛基類的作用和用法。 5掌握類的組合二、實驗內(nèi)容1請先閱讀下面的程序,寫出程序運行的結(jié)果,然后再上機運行程序,驗證自己分析的結(jié)果是否正確。(1) #include using namespace std;class Apublic:A()cout<
28、tual B() delete buf;cout<
29、t<<(<
30、y(); cout<<(<
31、public virtual Aprivate:int y; AAobj;public:B(int a,int b,int c):A(a),y(c),Aobj(c) cout<
32、<
33、lass Base2 public:Base2() cout<
34、) cout<
35、函數(shù)display()。3分別定義教師類Teacher和干部類Cadre,采用多重繼承的方式由這兩個類派生出新類Teacher_Cadre(教師兼干部類)。要求:(1)在兩個基類中都包含姓名、年齡、性別、地址、電話數(shù)據(jù)成員。(2)在Teacher類中還包含數(shù)據(jù)成員職稱title,在Cadre類中還包含數(shù)據(jù)成員職務(wù)post,在Teacher_Cadre類中還包含數(shù)據(jù)成員工資wage。(3)對兩個基類中的姓名、年齡、性別、地址、電話數(shù)據(jù)成員用相同的名字,在訪問這類數(shù)據(jù)成員時,指定作用域。 (4)在類體中聲明成員函數(shù),在類外定義成員函數(shù)。(5)在派生類Teacher_Cadre的成員函數(shù)show中調(diào)
36、用Teacher類中的display函數(shù),輸出姓名、年齡、性別、地址、電話,然后再用cout語句輸出職務(wù)和工資。4按下列要求編寫程序。(1)定義一個分?jǐn)?shù)類Score。它有3個數(shù)據(jù)成員:Chinese //語文課成績English //英語課成績Mathematics //數(shù)學(xué)課成績2個構(gòu)造函數(shù):無參的和帶參數(shù)的3個成員函數(shù):是否帶參數(shù)根據(jù)需要自定sum() //計算三門課總成績print() //輸出三門課成績和總成績 modify() //修改三門課成績(2)定義一個學(xué)生類Student。它有3個數(shù)據(jù)成員:Num //學(xué)號 Name //姓名MyScore //成績2個構(gòu)造函數(shù):無參的和帶參
37、數(shù)的3個成員函數(shù):是否帶參數(shù)根據(jù)需要自定sum() //計算某學(xué)生三門課總成績print() //輸出某學(xué)生學(xué)號、姓名和成績modify() //修改某學(xué)生學(xué)號、姓名和成績(3)在主函數(shù)中,先定義一個學(xué)生類對象數(shù)組,再通過for循環(huán)給對象數(shù)組賦上實際值,最后輸出對象數(shù)組個元素的值。5編寫一個程序?qū)崿F(xiàn)小型公司的人員信息管理系統(tǒng)。該公司雇員(employee)包括經(jīng)理(manager),技術(shù)人員(technician)、銷售員(salesman)和銷售部經(jīng)理(salesmanager)。要求存儲這些人員的姓名、編號、級別、當(dāng)月薪水,計算月薪并顯示全部信息。程序要對所有人員有提升級別的功能。為簡單起
38、見,所有人員的初始級別均為1,然后 進行升級,經(jīng)理升為4級,技術(shù)人員和銷售部經(jīng)理升為3級,銷售員仍為1級。月薪計算辦法是:經(jīng)理拿固定月薪8000元,技術(shù)人員按每小時100元領(lǐng)取月薪,銷售員按該當(dāng)月銷售額4%提成,銷售經(jīng)理既拿固定月工資也領(lǐng)取銷售提成,固定月工資為5000元,銷售提成為所管轄部門當(dāng)月銷售額的5。實驗五、多態(tài)性與虛函數(shù)(4學(xué)時)一、實驗?zāi)康?了解多態(tài)性的概念。2了解虛函數(shù)的作用及使用方法。 3了解靜態(tài)關(guān)聯(lián)和動態(tài)關(guān)聯(lián)的概念和用法。4了解純虛函數(shù)和抽象類的概念和用法。二、實驗內(nèi)容1閱讀下面的程序,寫出程序運行的結(jié)果。#include using namespace std;class
39、Baseprotected:int n;public: Base (int m) n=m++; virtual void g1()cout<
40、Base(n1) j=n2; void g1()cout<
41、含數(shù)據(jù)成員x,y(坐標(biāo)點)。以它為基類,派生出圓類Circle,增加數(shù)據(jù)成員radius(半徑),再以Cirlcle類為直接基類,派生出圓柱體類Cylinder,再增加數(shù)據(jù)成員height(高)。要求:(1)每個類都有構(gòu)造函數(shù)、用于從鍵盤獲取數(shù)據(jù)的成員函數(shù)set(),用于顯示數(shù)據(jù)的成員函 數(shù)display()。(2)用虛函數(shù)輸出各類對象信息。3先建立一個職工類Employee,包含數(shù)據(jù)成員name(職工姓名),ID(職工編號)。以它為基類,派生出經(jīng)理類Manager和技術(shù)人員類Technician,在經(jīng)理類中增加數(shù)據(jù)成員salary(代表經(jīng)理的月工資),在技術(shù)人員類中增加數(shù)據(jù)成員wage(代表
42、每小時的工資數(shù))和hours(月工作時數(shù))。在定義類時,所有類中必須包含有構(gòu)造函數(shù)、析構(gòu)函數(shù)、修改和獲取所有數(shù)據(jù)成員的函數(shù),以及純函數(shù)計算職工的工資,輸出職工的信息。4下列shape類是一個表示形狀的抽象類,area( )為求圖形面積的函數(shù),total( )則是一個通用的用以求不同形狀的圖形面積總和的函數(shù)。請從shape類派生三角形類(triangle)、矩形類(rectangle),并給出具體的求面積函數(shù)。實驗六、面向?qū)ο蟮耐讌f(xié)(2學(xué)時)一、實驗?zāi)康?1掌握友元的概念、友元函數(shù)的定義與使用方法。2掌握靜態(tài)數(shù)據(jù)成員與靜態(tài)成員函數(shù)的定義與使用方法。 二、實驗內(nèi)容1設(shè)計并測試點類Point,其數(shù)據(jù)
43、成員是直角坐標(biāo)系的點坐標(biāo),友元函數(shù)distance用來計算兩點間的距離。2設(shè)計一個書類Book,能夠保存書名、定價,所有書的本數(shù)和總價。實驗七、運算符重載(2學(xué)時)一、實驗?zāi)康?掌握運算符重載的規(guī)則。 2掌握幾種常用的運算符重載的方法。3了解轉(zhuǎn)換構(gòu)造函數(shù)的使用方法。4了解在Visual C++6.0環(huán)境下進行運算符重載要注意的問題。二、實驗內(nèi)容1閱讀下面的程序,寫出程序運行的結(jié)果。(1)#includeclass ABCint a,b,c;public: ABC(int x,int y,int z):a(x),b(y),c(z)friend ostream ;ostream return ou
44、t;int main()ABC obj(10,20,30);cout<
45、(); N1++;N1.display();--N1;N1.display();N1-- -- --;N1.display();return 0;2設(shè)計并實現(xiàn)一個日期類Date,要求:(1)可以建立具有指定日期(年、月、日)的Date對象,默認(rèn)日期是2009.1.1。(2)可以從輸出流輸出一個格式為“年-月-日”的日期,其中年是四位數(shù)據(jù),月、日可以是一位也可以是兩位數(shù)據(jù)。(3)可以動態(tài)地設(shè)置年、月、日。 (4)可以用運算符= =、!=、對兩個日期進行比較。(5)可以用運算符++、--、+=、-=等完成天數(shù)的加減一天或若干天的操作(6)Date類必須能夠正確表達(dá)日期,不會出現(xiàn)類似于13月,32日
46、一類的情況。Date類還必須處理閏年的問題,閏年包括:所有能被400整除的年份,以及能被4整除同時又不能被100整除的年份。(7)寫出主函數(shù)對該類進行測試。3下面是一個數(shù)組類CArray的定義。要求:(1)在此基礎(chǔ)上增加print()成員函數(shù)打印數(shù)組,(2)重載“=”、“+”、“-” 運算符使之能對該數(shù)組類對象進行賦值、加減運算。(3)寫出主函數(shù)對該類進行測試。class CArrayprivate:int* p_arr; int size;public:CArray(); //缺省構(gòu)造函數(shù)CArray(int* p_a,int s); //構(gòu)造函數(shù)CArray(const CArray //
47、復(fù)制構(gòu)造函數(shù) CArray();//析構(gòu)函數(shù)int operator(int pos) const; //訪問數(shù)組元素值的下標(biāo)運算符重載函數(shù)int //設(shè)置數(shù)組元素值的下標(biāo)運算符重載函數(shù)Carray ;CArray:: CArray() p_arr=NULL; size=0;CArray:: CArray(int* p_a,int s) if(s0) size=s; p_arr=new intsize; for(int i=0;i
48、e) p_arr=new intsize;for(int i=0;i=size) return p_arrsize-1;if(pos=size) return p_arrsize-1;if(pos<0) return p_arr0; return p_arrpos;4下面是一個自定義字符串類的聲明。請寫出該類所有成員函數(shù)的類外定義代碼。class string private:unsigned buflen;char * buffer;public:string();//構(gòu)造函數(shù)string(unsigned);string(char);string(const char*);string(c
49、onst string //復(fù)制構(gòu)造函數(shù)string();//析構(gòu)函數(shù)//重載賦值運算符stringstring char *operator+=(const char *right);friend string operator+(const string //字符串連接string operator()(unsigned start,unsigned len); //取子串unsigned length()const; //求字符串長度char //訪問單個字符int compare(const string //字符串比較operator const char *()const; //到
50、普通c字符串的轉(zhuǎn)換friend ostream //字符串的輸出;實驗八、模板(2學(xué)時)一、實驗?zāi)康?1函數(shù)模板的定義與調(diào)用。2掌握類模板的聲明與使用方法。二、實驗內(nèi)容1設(shè)計一個函數(shù)模板,實現(xiàn)兩數(shù)的交換,并用int、float、double、char類型的數(shù)據(jù)進行測試。2設(shè)計一個函數(shù)模板,實現(xiàn)從int、float、double、char類型的數(shù)組找出最大值元素。提示:可用類型參數(shù)傳遞數(shù)組、用非類型參數(shù)傳遞數(shù)組大小,為了找出char*類型數(shù)組中的最大值元素,需要對該類型進行重載或特化。3編寫一個順序表類模板。 4建立兩個int類型的向量vector,利用merge算法將其合并,然后用sort算法
51、對合并后的向量進行排序,最后輸出排序結(jié)果。 實驗九、輸入輸出流(自學(xué))一、實驗?zāi)康?深入理解C++的輸入輸出的含義與其實現(xiàn)方法。2掌握標(biāo)準(zhǔn)輸入輸出流的應(yīng)用,包括格式輸入輸出。3掌握對文件的輸入輸出操作。二、實驗內(nèi)容1閱讀下面的程序,寫出程序運行的結(jié)果。 (1)#include#includeusing namespace std;int main()fstream out,in;out.open(a.dat,ios::out);out<
52、creen...n;out.close();char buffer80;in.open(a.dat,ios::in); while(!in.eof()) in.getline(buffer,80);cout<
53、number(num),age(Age),sal(Salary)strcpy(name,Name); void display() cout<
54、326);for(int i=0;i<6;i++) out.write((char*)out.close();Worker s1; ifstream in(Employee.dat,ios::in|ios::binary);in.seekg(2*(sizeof(s1)),ios::beg);in.read((char*)s1.display();in.seekg(0,ios::beg);in.read((char*)s1.display();in.close();return 0;2已知數(shù)據(jù)文件IN.DAT中存有20個整數(shù),每個整數(shù)間用空格分隔。有一類Array的結(jié)構(gòu)如下:class Arra
55、y int A20;public:Array()for(int i=0;i<20;i++) Ai=0;int getNumberA(Array void getdata();//讀數(shù)據(jù)函數(shù)void max_min(int //排序函數(shù)void putdata(int //寫結(jié)果數(shù)據(jù)函數(shù);其中:成員函數(shù)getdata()的功能為:從數(shù)據(jù)文件IN.DAT中把20個數(shù)據(jù)讀出來存入數(shù)據(jù)成員A中。成員函數(shù)max_min(int int main() int a=8,5,5,0,6,0,8,5,5,0,7,8;for(int i=0;i<5;i++)try cout<
56、<
57、<
58、r2()trycout<
59、常處理功能:InvalidDay:對于日期day成員,不能接受大于31或小于1的值,當(dāng)傳遞給類的日期大于31或小于1時,拋出這種類型的異常。InvalidMonth:對于月month,不能接受大于12或小于1的值,當(dāng)傳遞給類的日期大于12 或小于1時,拋出這種類型的異常。 第2部分 補充習(xí)題第1章 面向?qū)ο蟪绦蛟O(shè)計概述一、選擇題1、C++是( )。A 面向?qū)ο蟮某绦蛟O(shè)計語言B 結(jié)構(gòu)化程序設(shè)計語言C 既是面向?qū)ο蟮某绦蛟O(shè)計語言又是結(jié)構(gòu)化的程序設(shè)計語言D 非結(jié)構(gòu)化的程序設(shè)計語言2、C++語言屬于( )。 A 機器語言 B 低級語言 C 中級語言 D 高級語言3、下面關(guān)于對象概念的描述中,錯誤的是(
60、 )。A 對象就是C語言中的結(jié)構(gòu)變量B 對象代表著正在創(chuàng)建的系統(tǒng)中的一個實體C 對象是一個屬性和操作(或方法)的封裝體D 對象之間的信息傳遞是通過消息進行的4、下面關(guān)于類概念的描述中,錯誤的是( )。A 類是抽象數(shù)據(jù)類型的實現(xiàn)B 類是具有共同行為的若干對象的統(tǒng)一描述體C 類是創(chuàng)建對象的樣板D 類就是C語言中的結(jié)構(gòu)體類型5、下列關(guān)于C++類的描述中錯誤的是( )。A 類與類之間可以通過一些手段進行通信和聯(lián)絡(luò) B 類用于描述事物的屬性和對事物的操作C 類與類之間必須是平等的關(guān)系,而不能組成層次關(guān)系D 類與類之間可以通過封裝而具有明確的獨立性6、面向?qū)ο蟪绦蛟O(shè)計思想的主要特征中不包括( )。A 封裝
61、性 B 多態(tài)性 C 繼承性 D 功能分解,逐步求精二、填空題1、構(gòu)成對象的兩個主要因素是 和 ,其中 用于描述對象的靜態(tài)特征,用于描述對象的動態(tài)特征。2、類和對象的關(guān)系可表述為:類是對象的 ,而對象則是類的 。3、封裝包含兩方面含義,一是用 把 包裝起來,二將對象中某些部分 。4、 是指特殊類自動地?fù)碛谢螂[含地復(fù)制其一般類的全部屬性與操作。5、面向?qū)ο蟮能浖こ贪ǖ奈鍌€階段為: , , , , 。 第2章 C++基礎(chǔ)知識一、選擇題1、下列關(guān)于C++語言的發(fā)展說法錯誤的是( )。A C++語言起源于C語言 B C++語言最初被稱為“帶類的C”C 在1980年C++被命名 D 在1983年C++
62、被命名2、C++語言是以 語言為基礎(chǔ)逐漸發(fā)展而演變而成的一種程序設(shè)計語言。( )A Pascal B C C Basic D Simula673、下列關(guān)于C++與C語言關(guān)系的描述中錯誤的是( )。A C++是C語言的超集B C++是C語言進行了擴充C C++和C語言都是面向?qū)ο蟮某绦蛟O(shè)計語言 D C++包含C語言的全部語法特征4、下列C++標(biāo)點符號中表示行注釋開始的是( )。A # B ; C // D 5、每個C++程序都必須有且僅有一個( )。A 預(yù)處理命令 B 主函數(shù) C 函數(shù) D 語句6、C++對C語言做了很多改進,下列描述中哪一項使得C語言發(fā)生了質(zhì)變,即從面向過程變成面向?qū)ο螅?)。
63、A 增加了一些新的運算符 B 允許函數(shù)重載,并允許設(shè)置默認(rèn)參數(shù)C 規(guī)定函數(shù)說明必須用原型 D 引進類和對象的概念7、對定義重載函數(shù)的下列要求中,錯誤的是( )。A 要求參數(shù)的個數(shù)不同 B 要求參數(shù)中至少有一個類型不同C 要求參數(shù)個數(shù)相同時,參數(shù)類型不同 D 要求函數(shù)的返回值不同8、在函數(shù)的返回值類型與返回值表達(dá)式的類型的描述中,錯誤的是( )。 A 函數(shù)返回值的類型是在定義函數(shù)時確定,在函數(shù)調(diào)用時是不能改變的B 函數(shù)返回值的類型就是返回值表達(dá)式的類型C 函數(shù)返回值表達(dá)式類型與返回值類型不同時,函數(shù)表達(dá)式類型應(yīng)轉(zhuǎn)換成返回值類型D 函數(shù)返回值類型確定了返回值表達(dá)式的類型9、下列不正確的選項是( )
64、。A C++語言是一種既支持面向過程程序設(shè)計,又支持面向?qū)ο蟪绦蛟O(shè)計的混合型語言B 標(biāo)點符號是在程序中起分割內(nèi)容和界定范圍作用的一類單詞C iostream是一個標(biāo)準(zhǔn)的頭文件,定義了一些輸入輸出流對象D 類與類之間不可以進行通信和聯(lián)絡(luò)10、下列表示引用的方法中,正確的是( )。已知:int k=1000;A int B char C int D float 二、填空題 1、C++既可以用來進行面向 程序設(shè)計,又可以進行面向 程序設(shè)計。2、常量分成兩種,一種是 常量,另一種是 常量。3、 就是某一變量的別名,對其操作與對變量直接操作完全一樣。4、按函數(shù)在語句中的地位分類,可以有以下3種函數(shù)調(diào)用方
65、式: ,, 。 5、函數(shù)與引用聯(lián)合使用主要有兩種方式:一是 ;二是 。6、頭文件由三部分內(nèi)容組成: , , 。三、程序閱讀題1、分析下面的執(zhí)行結(jié)果#includeusing namespace std;int main() int a,b,sum; // 定義a,b,sum三個整型變量a=43; // 把整數(shù)常量賦給變量ab=37;sum=a+b; // a與b相加的和賦給變量sumcout<
66、n() int a;int // 變量引用b=10;cout<