C+面向?qū)ο蟪绦蛟O(shè)計教程課后習(xí)題答案游洪躍ppt課件_第1頁
C+面向?qū)ο蟪绦蛟O(shè)計教程課后習(xí)題答案游洪躍ppt課件_第2頁
C+面向?qū)ο蟪绦蛟O(shè)計教程課后習(xí)題答案游洪躍ppt課件_第3頁
C+面向?qū)ο蟪绦蛟O(shè)計教程課后習(xí)題答案游洪躍ppt課件_第4頁
C+面向?qū)ο蟪绦蛟O(shè)計教程課后習(xí)題答案游洪躍ppt課件_第5頁
已閱讀5頁,還剩170頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、C+面向?qū)ο蟪绦蛟O(shè)計教程,第1章 C+程序設(shè)計基礎(chǔ) 習(xí)題解答,一、選擇題,1下列語句中,錯誤的是 。 A)const int buffer = 256; B)const int temp; C)const double *point; D)double * const pt = new double(5.5); 解析:修飾符const聲明的常量只能被讀取,該常量必須在聲明時進行初始化,并且它的值在程序中不能改變。選項B)沒有初始化,錯誤。選項C)定義了一個指向const double的指針,其意義為指針 point指向的變量不能通過指針point來改變,D)中表示指針pt是常量指針,已在聲明時

2、進行了初始化。 答案:B,2關(guān)于函數(shù)重載,下列敘述中錯誤的是 。 A)重載函數(shù)的函數(shù)名必須相同 B)重載函數(shù)必須在參數(shù)個數(shù)或類型上有所不同 C)重載函數(shù)的返回值類型必須相同 D)重載函數(shù)的函數(shù)體可以有所不同 解析:函數(shù)重載是用同一個函數(shù)名字在不同的參數(shù)類型或參數(shù)個數(shù)上做類似的操作方作,它們的實現(xiàn)方法可以不同。所以說,重載函數(shù)的函數(shù)名必須相同,函數(shù)體可以有所不同。函數(shù)重載必須在參數(shù)類型或參數(shù)個數(shù)上不一樣,不能依靠返回值不一樣來區(qū)分重載函數(shù)。 答案:C,3有以下程序: void Fun(int i, int j) cout i + j endl;/ 輸出i+j void Fun(int i) co

3、ut i+ endl;/ 輸出i+ int main()/ 主函數(shù)main() int a = 1;/ 定義變量i Fun(a);/ 調(diào)用Fun() return 0; / 返回值0, 返回操作系統(tǒng) 該程序執(zhí)行后輸出的結(jié)果是 。 A)1 B)2 C)3 D)4 解析:由于主函數(shù)中調(diào)用的Fun()函數(shù)只有一個參數(shù),故執(zhí)行的是void Fun( int i )的版本,執(zhí)行“cout i+ endl;”時,由于是后綴“+”,所以先輸出i的值1,再使i加1。 答案:A,二、編程題,1編寫一個C+程序,要求輸出“歡迎學(xué)習(xí)C+語言!”。 參考程序: #include / 編譯預(yù)處理命令 using nam

4、espace std;/ 使用命名空間std int main()/ 主函數(shù)main() cout 歡迎學(xué)習(xí)C+語言! endl;/ 用C+的方法輸出一行 system(PAUSE);/ 調(diào)用庫函數(shù)system( ),輸出提示信息 return 0; / 返回值, 返回操作系統(tǒng),2編一個程序,用一個函數(shù)實現(xiàn)求n個整型數(shù)據(jù)的最小值。函數(shù)原型如下: int Min(int a, int n) 參考程序: #include / 編譯預(yù)處理命令 using namespace std;/ 使用命名空間std int Min(int a, int n)/ 求n個整型數(shù)據(jù)的最小值 int m = a0,

5、i;/ 臨時變量 for (i = 1; i n; i+) / 依次比較求最小值 if (ai m) / 如果ai更小 m = ai;/ ai為當(dāng)前最小值 return m;/ 返回最小值 int main()/ 主函數(shù)main() int a = 1, 2, 3, 4, 5, 6, 7, 8, 9, -10, n = 10; cout 最小值為 Min(a, n) endl;/ 輸出最小值 system(PAUSE);/ 調(diào)用庫函數(shù)system( ),輸出提示信息 return 0; / 返回值, 返回操作系統(tǒng),3求2個數(shù)或3個整數(shù)中的最大數(shù),用兩個同名函數(shù)實現(xiàn),要求編寫測試程序。 參考程序

6、: #include / 編譯預(yù)處理命令 using namespace std;/ 使用命名空間std int Max(int x, int y)/ 求x,y的最大值 return x y ? x : y;/ 返回x,y的最大值 int Max(int x, int y, int z)/ 求x,y,z的最大值 int m = x y ? x : y;/ x,y的最大值 m = m z ? m : z;/ m,z的最大值 return m;/ 返回x,y,z的最大值 int main()/ 主函數(shù)main() cout 2,3的最大值為 Max(2, 3) endl; cout 1,6,8的最

7、大值為 Max(1, 6, 8) endl; system(PAUSE);/ 調(diào)用庫函數(shù)system( ),輸出提示信息 return 0; / 返回值, 返回操作系統(tǒng),4用變量的引用作函數(shù)形參,實現(xiàn)交換兩個整型變量,要求編寫測試程序。 參考程序: #include / 編譯預(yù)處理命令 using namespace std;/ 使用命名空間std void Swap(int / 返回值, 返回操作系統(tǒng),5編一個程序,用同一個函數(shù)名對n個數(shù)據(jù)進行從小到大排序,數(shù)據(jù)類型可以是整型、單精度實型、雙精度實型,用重載函數(shù)實現(xiàn)。 參考程序: #include / 編譯預(yù)處理命令 using namesp

8、ace std;/ 使用命名空間std void Sort(int a, int n)/ 對a0.an-1進行排序 int tem, i, j;/ 定義變量 for (i = 0; i aj) / ai比aj更大 tem = ai; ai = aj; aj = tem;,5編一個程序,用同一個函數(shù)名對n個數(shù)據(jù)進行從小到大排序,數(shù)據(jù)類型可以是整型、單精度實型、雙精度實型,用重載函數(shù)實現(xiàn)。 參考程序: void Sort(float a, int n)/ 對a0.an-1進行排序 float tem;/ 臨時變量 int i, j;/ 定義變量 for (i = 0; i aj) / ai比aj更

9、大 tem = ai; ai = aj; aj = tem;,5編一個程序,用同一個函數(shù)名對n個數(shù)據(jù)進行從小到大排序,數(shù)據(jù)類型可以是整型、單精度實型、雙精度實型,用重載函數(shù)實現(xiàn)。 參考程序: void Sort(double a, int n)/ 對a0.an-1進行排序 double tem;/ 臨時變量 int i, j;/ 定義變量 for (i = 0; i aj) / ai比aj更大 tem = ai; ai = aj; aj = tem;,5編一個程序,用同一個函數(shù)名對n個數(shù)據(jù)進行從小到大排序,數(shù)據(jù)類型可以是整型、單精度實型、雙精度實型,用重載函數(shù)實現(xiàn)。 參考程序: int mai

10、n()/ 主函數(shù)main() int a = 1, 3, 2, 5, 6, 9, 0, 6;/ 定義a float b = 1.6, 3.3, 2.8, 5.6, 6.8, 9.6, 0.6, 6.8;/ 定義b double c = 1.2, 3.1, 2.6, 5.8, 6.8, 9.8, 0.8, 6.2;/ 定義c int i, n = 8;/ 定義變量 Sort(a, n);/ 對a排序 cout a:;/ 輸出提示 for (i = 0; i n; i+) cout ai ;/ 輸出ai cout endl;/ 換行,5編一個程序,用同一個函數(shù)名對n個數(shù)據(jù)進行從小到大排序,數(shù)據(jù)類型

11、可以是整型、單精度實型、雙精度實型,用重載函數(shù)實現(xiàn)。 參考程序: Sort(b, n);/ 對b排序 cout b:;/ 輸出提示 for (i = 0; i n; i+) cout bi ;/ 輸出bi cout endl;/ 換行 Sort(c, n);/ 對c排序 cout c:;/ 輸出提示 for (i = 0; i n; i+) cout ci ;/ 輸出ci cout endl;/ 換行 system(PAUSE);/ 調(diào)用庫函數(shù)system( ),輸出系統(tǒng)提示信息 return 0; / 返回值, 返回操作系統(tǒng),C+面向?qū)ο蟪绦蛟O(shè)計教程,第2章 類和對象 習(xí)題解答,一、選擇題,

12、1下列選項中,不屬于面向?qū)ο蟪绦蛟O(shè)計特征的是 。 A)繼承性B)多態(tài)性 C)類比性D)封裝性 解析:封裝性、繼承性和多態(tài)性是面向?qū)ο笏枷氲?個主要特征。封裝性指將數(shù)據(jù)和算法捆綁成一個整體,這個整體就是對象,描述對象的數(shù)據(jù)被封裝在其內(nèi)部。繼承性是指一種事物保留了另一種事物的全部特征,并且具有自身的獨有特征。多態(tài)性主要指當(dāng)多個事物繼承自一種事物時,同一操作在它們之間表現(xiàn)出不同的行為。 答案:C,2在面向?qū)ο蠓椒ㄖ?,實現(xiàn)信息隱蔽是依靠 。 A)對象的繼承B)對象的多態(tài) C)對象的封裝D)對象的分類 解析:在面向?qū)ο蠓椒ㄖ?,封裝性是指將數(shù)據(jù)和算法捆綁成一個整體,這個整體就是對象,描述對象的數(shù)據(jù)被封裝在

13、內(nèi)部,只可以通過對象提供的算法來進行操作,從而實現(xiàn)信息隱蔽。 答案:C,3下列關(guān)于類和對象的敘述中,錯誤的是 。 A)一個類只能有一個對象 B)對象是類的具體實例 C)類是某一類對象的抽象 D)類和對象的關(guān)系就像數(shù)據(jù)類型和變量的關(guān)系 解析:在面向?qū)ο笤O(shè)計中,類是同一種對象的抽象,而不只是對一個對象的抽象,一個類具有多個對象。對象是類的具體實例。就像數(shù)據(jù)類型和變量的關(guān)系,一種數(shù)據(jù)類型可以定義多個變量,一個變量卻只能是一種數(shù)據(jù)類型。 答案:A,4有以下類聲明: class MyClass int num; ; 則MyClass類的成員num是 。 A)公有數(shù)據(jù)成員 B)公有成員函數(shù) C)私有數(shù)據(jù)成

14、員 D)私有成員函數(shù) 解析:函數(shù)聲明時,函數(shù)名后必須帶“”,所以num是數(shù)據(jù)成員。在類中,當(dāng)沒有用訪問權(quán)限標(biāo)識符標(biāo)識時,默認為私有權(quán)限。 答案:C,5在下列函數(shù)原型中,可以作為類AA構(gòu)造函數(shù)的是 。 A)void AA(int);B)int AA(); C)AA(int) const D)AA(int); 解析:構(gòu)造函數(shù)用于初始綸對象的數(shù)據(jù)成員,沒有返回類型,而且由于常成員函數(shù)不能更新對象的數(shù)據(jù)成員,所以常成員函數(shù)也不可能作為構(gòu)造函數(shù)。 答案:D,6下列關(guān)于this指針的敘述中,正確的是 。 A)任何與類相關(guān)的函數(shù)都有this指針 B)類的成員函數(shù)都有this指針 C)類的友元函數(shù)都有this

15、指針 D)類的非靜態(tài)成員函數(shù)才有this指針 解析:this指針只能在類的成員函數(shù)中使用,它指向該成員函數(shù)被調(diào)用的對象。但是有兩種與類相關(guān)的函數(shù)都沒有this指針,即靜態(tài)成員函數(shù)和友元函數(shù)。 答案:D,7有以下程序: class Test private: static int n;/ 靜態(tài)成員 public: Test() n += 2; / 構(gòu)造函數(shù) Test() n -= 3; / 析構(gòu)函數(shù) static int GetNum() return n; / 返回n ; int Test:n = 1;/ 初始化n int main()/ 主函數(shù)main() Test *p = new Tes

16、t;/ 定義指針p delete p;/ 釋放p指向的動太對象 cout n= Test:GetNum() endl;/ 輸出n return 0; / 返回值0, 返回操作系統(tǒng) 執(zhí)行后的輸出結(jié)果是 。 A)n=0 B)n=1 C)n=2 D)n=3 解析:靜態(tài)數(shù)據(jù)成員初始化的值為1,執(zhí)行“Test *p = new Test”將調(diào)用構(gòu)造函數(shù),執(zhí)行“n += 2;”,n的值變?yōu)?,執(zhí)行“delete p;”時將調(diào)用析構(gòu)函數(shù),執(zhí)行“n -= 3;”,n的值減3,變?yōu)?。 答案:A,8有以下程序: class MyClass private: int n;/ 數(shù)據(jù)成員 public: MyClas

17、s(int k): n(k)/ 構(gòu)造函數(shù) int Get() return n; / 返回n int Get() const return n + 1; / 返回n+1 ; int main()/ 主函數(shù)main() MyClass a(5);/ 定義對象a const MyClass b(6);/ 定義對象b cout a.Get() b.Get() endl;/ 輸出信息 return 0; / 返回值0, 返回操作系統(tǒng) 運行后的輸出結(jié)果是 。 A)55 B)57 C)75 D)77 解析:const是一個判斷重載的標(biāo)志,a.Get調(diào)用“int Get() return n; ”,故得到5

18、,而常對象b執(zhí)行 b.Get”時,調(diào)用常成員函數(shù)“int Get() const return n + 1; ”,故得到6+1=7。 答案:B,9由于常對象不能被更新,因此 。 A)通過常對象只能調(diào)用它的常成員函數(shù) B)通過常對象只能調(diào)用靜態(tài)成員函數(shù) C)常對象的成員都是常成員 D)通過常對象可以調(diào)用任何不改變對象值的成員函數(shù) 解析:通過常對象只能調(diào)用類中的常成員函數(shù),而不能調(diào)用類中的其他成員函數(shù)。 答案:A,10下列情況中,不會調(diào)用復(fù)制構(gòu)造函數(shù)的是 。 A)用一個對象去初始化同一類的另一個新對象時 B)將類的一個對象賦予該類的另一個對象時 C)函數(shù)的形參是類的對象,調(diào)用函數(shù)進行形參和實參結(jié)合

19、時 D)函數(shù)的返回值是類的對象的引用,函數(shù)執(zhí)行返回調(diào)用時 解析:只要在程序的執(zhí)行中,需要用一個對象來初始化另一個對象,都要調(diào)用復(fù)制構(gòu)造函數(shù),包括A、B、C三種情況。 答案:D,11以下關(guān)鍵字不能用來聲明類的訪問權(quán)限的是 。 A)public B)static C)protected D)private 解析:類的訪問權(quán)限有三種:公有、私有、保護,關(guān)鍵字分別是public,private,protected,。static用于靜態(tài)成員的聲明。 答案:B,12有以下程序: class MyClass public: MyClass() cout A; / 無參構(gòu)造函數(shù) MyClass(char c

20、) cout c; / 帶參構(gòu)造函數(shù) MyClass() cout B; / 析構(gòu)函數(shù) ; int main()/ 主函數(shù)main() MyClass a, *p;/ 定義變量 p = new MyClass(X);/ 分配動態(tài)空間 delete p;/ 釋放動態(tài)空間 cout endl;/ 換行 return 0; / 返回值0, 返回操作系統(tǒng) 執(zhí)行這個程序,屏幕上將顯示輸出 。 A)ABX B)ABXB C)ABXB D)AXBB 解析:定義對象a時,調(diào)用一次構(gòu)造函數(shù)“MyClass() cout A; ”,但定義對象指針p時不調(diào)用構(gòu)造函數(shù);使用new動態(tài)創(chuàng)建對象時,根據(jù)參數(shù)情況調(diào)用“My

21、Class(char c) cout c; ”,輸出X;執(zhí)行“delete p;”時,需要調(diào)用一次析構(gòu)函數(shù),輸出B;最后主函數(shù)結(jié)束時,對象a調(diào)用一次析構(gòu)函數(shù),輸出B。 答案:D,13有以下程序: class Test public: static int a;/ 靜態(tài)成員 void Init() a = 1; / 初始化函數(shù) Test(int a = 6) Init(); a+;/ 構(gòu)造函數(shù) ; int Test:a = 0;/ 初始化a Test obj;/ 定義全局對象 int main()/ 主函數(shù)main() cout obj.a endl;/ 輸出a return 0; / 返回值0

22、, 返回操作系統(tǒng) 運行時輸出的結(jié)果是 。 A)0 B)1 C)2 D)3 解析:首先初始化靜態(tài)數(shù)據(jù)成員a為0,然后在定義全局對象obj時調(diào)用構(gòu)造函數(shù)。這時有兩個a,一個是“Test(int a = 6) Init(); a+;”函數(shù)中的局部變量a,另一個是靜態(tài)數(shù)據(jù)成員a,需要靠作用域來區(qū)分。在執(zhí)行Init()時,由于離開了構(gòu)造函數(shù)“Test(int a = 6) Init(); a+;”的作用域,Init()里的a為靜態(tài)數(shù)據(jù)成員,這時靜態(tài)數(shù)據(jù)成員a賦值為1;之后回到構(gòu)造函數(shù)執(zhí)行a+,這個a為“Test(int a = 6) Init(); a+;”中的a,值變?yōu)?,但當(dāng)構(gòu)造函數(shù)執(zhí)行完畢后,該局

23、部變量a隨之消失,與對象無關(guān)。obj.a調(diào)用的是靜態(tài)數(shù)據(jù)成員,結(jié)果為1。 答案:B,14有以下程序: class Test private: long x;/ 私有數(shù)據(jù)成員 public: Test(long a): x(a) / 構(gòu)造函數(shù) friend long Fun(Test s);/ 友元 ; long Fun(Test s) if (s.x = 1 ) return 1;/ 遞歸結(jié)束 else return s.x * Fun(Test(s.x - 1);/ 遞歸調(diào)用 int main()/ 主函數(shù)main() int sum = 0;/ 定義變量 for (int i = 0; i

24、 6; i+) sum += Fun(Test(i);/ 累加求和 cout sum endl;/ 輸出sum return 0; / 返回值0, 返回操作系統(tǒng) 運行后的輸出結(jié)果是 。 A)120 B)16 C)154 D)34 解析:友元函數(shù)Fun()參數(shù)表中的對象在初始化時需執(zhí)行構(gòu)造函數(shù)“Test:Test(long a)”,調(diào)用過程為:先調(diào)用構(gòu)造函數(shù)Test(i),使Test中x的值為i,再通過友元函數(shù)直接訪問Test.x,執(zhí)行Fun()中的語句,可得到:Fun(Test(0)=1,F(xiàn)un(Test(1)=1,F(xiàn)un(Test(2)=2*1,F(xiàn)un(Test3)=3*2*1=6,F(xiàn)un(

25、Test(4)=4*3*2*1=24,F(xiàn)un(Test(5)=5*4*3*2*1=120,sum=1+1+2+6+24+120=154。 答案:C,15有以下程序: class Test private: int a;/ 數(shù)據(jù)成員 public: Test() cout 無參構(gòu)造函數(shù) endl; / 無參構(gòu)造函數(shù) Test(int a) cout a endl; / 帶參構(gòu)造函數(shù) Test(const Test / 返回值0, 返回操作系統(tǒng) 運行時的輸出結(jié)果是 。 A)3 B)無參構(gòu)造函數(shù)C)復(fù)制構(gòu)造函數(shù)D)3 析構(gòu)函數(shù) 析構(gòu)函數(shù) 析構(gòu)函數(shù) 解析:創(chuàng)建對象a時帶有參數(shù)3,故調(diào)用構(gòu)造函數(shù)Test

26、( int a),輸出3并換行;程序結(jié)束時調(diào)用析構(gòu)函數(shù)Test(),輸出“析構(gòu)函數(shù)”并換行。 答案:D,16有以下程序: class MyClass private: int n;/ 數(shù)據(jù)成員 public: MyClass(int m): n(m) / 構(gòu)造函數(shù) void Print() const cout const:n= n ; / 常成員函數(shù) void Print() cout n= n ; / 非常成員函數(shù) ; int main()/ 主函數(shù)main() const MyClass obj1(10);/ 常對象 MyClass obj2(20);/ 非常對象 obj1.Print(

27、);/ 輸出信息 obj2.Print();/ 輸出信息 cout endl;/ 換行 return 0; / 返回值0, 返回操作系統(tǒng) 程序的輸出結(jié)果是 。 A)n=10 const:n=20B)const:n=10 const:n=20 C)const:n=10 n=20D)n=10 n=20 解析:根據(jù)const修飾符選擇對應(yīng)的構(gòu)造函數(shù),objl為常對象,調(diào)用常成員函數(shù),輸出“const:n=10 ”,obj2為一般對象,調(diào)用優(yōu)先調(diào)用非常成員函數(shù),輸出“n=20 ”。 答案:C,二、填空題,1在面向?qū)ο蠓椒ㄖ校?描述的是具有相同屬性與操作的一組對象。 解析:在面向?qū)ο笤O(shè)計中,一個對象是由

28、一些屬性和操作構(gòu)成的。對象的屬性描述了對象的內(nèi)部細節(jié)。類是具有相同屬性和操作的一組對象的集合,它為屬于該類的所有對象提供統(tǒng)一的抽象描述。 答案:類,2非成員函數(shù)應(yīng)聲明為類的 函數(shù)才能訪問這個類的private成員。 解析:類具有數(shù)據(jù)封裝和隱藏的特性,通常只有類的成員函數(shù)才能訪問類的私有成員,外部函數(shù)只能訪問類的公有成員。但在某些情況下,需要在類的外部訪問類的私有成員,這時必須依靠引入友元來實現(xiàn)。 答案:友元,3下列程序的輸出結(jié)果為: 0 1 試將程序補充完整。 class Point private: int x, y;/ 坐標(biāo) static int count;/ 靜態(tài)數(shù)據(jù)成員 public

29、: Point(int m = 0, int n = 0): x(m), y(n) count+; / 構(gòu)造函數(shù) Point() count-; / 析構(gòu)函數(shù) int GetX() const return x; / 返回x int GetY() const return y; / 返回y static void ShowCount() cout count endl; / 輸出count ; / 靜態(tài)數(shù)據(jù)成員的初始化 int main()/ 主函數(shù)main() Point:ShowCount();/ 輸出count Point a(6, 8);/ 定義對象 Point:ShowCount()

30、;/ 輸出count system(“PAUSE”); / 調(diào)用庫函數(shù)system( ),輸出提示信息 return 0; / 返回值0, 返回操作系統(tǒng) 。 解析:由第一次調(diào)用GetCount()函數(shù)輸出count的值為0可知,應(yīng)將其初始化為0,再根據(jù)靜態(tài)數(shù)據(jù)成員的初始化格式: 類型 類名:靜態(tài)成員名字 = 值; 可得橫線處填寫的語句。 答案:int Point:count = 0,4有以下類聲明: class MyClass int i; private: int j; protected: int k; public: int m, n; ; 其中私有成員的數(shù)量是 。 解析:在用class

31、聲明類的成員聲明中,如果沒有標(biāo)識成員的訪問權(quán)限,則默認為私有的訪問權(quán)限,故i為私有訪問權(quán)限。 答案:2,5有以下程序: class Integer private: int n;/ 數(shù)據(jù)成員 public: Integer(int n = 0) = n; / 構(gòu)造函數(shù) void Show() const cout n 或 Integer : n,6有以下程序: class A public: A() cout A; / 構(gòu)造函數(shù) A() cout A; / 析構(gòu)函數(shù) ; int main()/ 主函數(shù)main() A *p = new A;/ 定義指針 delete p;/ 釋放動態(tài)空間 co

32、ut endl;/ 換行 system(PAUSE);/ 調(diào)用庫函數(shù)system( ),輸出系統(tǒng)提示 return 0; / 返回值0, 返回操作系統(tǒng) 程序的輸出結(jié)果是 。 解析:創(chuàng)建動態(tài)對象時需調(diào)用A的構(gòu)造函數(shù),輸出“A”;釋放動態(tài)對象時,調(diào)用A的析構(gòu)函數(shù),輸出“A”。 答案:AA,三、編程題,1定義一個滿足如下要求的Date類。 (1)用下面的格式輸出日期: 年-月-日 (2)設(shè)置日期。 并編出應(yīng)用程序,定義日期對象,設(shè)置日期,輸出該對象提供的日期。 參考程序: #include / 編譯預(yù)處理命令 using namespace std;/ 使用命名空間std class Date pr

33、ivate: / 數(shù)據(jù)成員 int year;/ 年 int month;/ 月 int day;/ 日,1定義一個滿足如下要求的Date類。 (1)用下面的格式輸出日期: 年-月-日 (2)設(shè)置日期。 并編出應(yīng)用程序,定義日期對象,設(shè)置日期,輸出該對象提供的日期。 參考程序: public: / 公有函數(shù) Date(int y = 2010, int m = 1, int d = 1): year(y), month(m), day(d)/ 構(gòu)造函數(shù) void Set(int y, int m, int d)/ 設(shè)置日期 year = y; month = m; day = d; void

34、Show() const/ 顯示日期 cout year - month - day endl; ; int main()/ 主函數(shù)main() Date d;/ 定義對象 d.Show();/ 顯示日期 d.Set(2016, 6, 18);/ 設(shè)置日期 d.Show();/ 顯示日期 system(PAUSE);/ 調(diào)用庫函數(shù)system( ),輸出提示信息 return 0; / 返回值, 返回操作系統(tǒng),2定義一個時間類Time,能提供和設(shè)置由時、分、秒組成的時間,并編出應(yīng)用程序,定義時間對象,設(shè)置時間,輸出該對象提供的時間。 參考程序: #include / 編譯預(yù)處理命令 using

35、 namespace std;/ 使用命名空間std class Time private: / 數(shù)據(jù)成員 int hour;/ 時 int minute;/ 分 int second;/ 秒 public: / 公有函數(shù) Time(int h = 0, int m = 0, int s = 0):/ 構(gòu)造函數(shù) hour(h), minute(m), second(s) void Set(int h, int m, int s)/ 設(shè)置日期 hour = h; minute = m; second = s; void Show() const/ 顯示日期 cout hour : minute

36、: second endl; ; int main()/ 主函數(shù)main() Time t;/ 定義對象 t.Show();/ 顯示時間 t.Set(8, 6, 18);/ 設(shè)置時間 t.Show();/ 顯示時間 system(PAUSE);/ 調(diào)用庫函數(shù)system( ),輸出提示信息 return 0; / 返回值, 返回操作系統(tǒng),3編寫設(shè)計一個People(人)類。該類的數(shù)據(jù)成員有姓名(name)、年齡(age)、身高(height)、體重(weight)和人數(shù)(num),其中人數(shù)為靜態(tài)數(shù)據(jù)成員,成員函數(shù)有構(gòu)造函數(shù)(People)、進食(Eatting)、運動(Sporting)、顯示

37、(Show)和顯示人數(shù)(ShowNum)。其中構(gòu)造函數(shù)由已知參數(shù)姓名(nm)、年齡(a)、身高(h)和體重(w)構(gòu)造對象,進食函數(shù)使體重加1,運動函數(shù)使身高加1,顯示函數(shù)用于顯示人的姓名、年齡、身高、體重,顯示人數(shù)函數(shù)為靜態(tài)成員函數(shù),用于顯示人數(shù)。假設(shè)年齡的單位為歲,身高的單位為厘米,體重的單位為市斤,要求所有數(shù)據(jù)成員為private訪問權(quán)限,所有成員函數(shù)為public訪問權(quán)限,在主函數(shù)中定義若干個對象,通過對象直接訪問類的所有非靜態(tài)成員函數(shù),通過類訪問靜態(tài)成員函數(shù)。 參考程序: #include / 編譯預(yù)處理命令 using namespace std;/ 使用命名空間std class

38、People private: / 數(shù)據(jù)成員 char name9;/ 姓名 int age;/ 年齡 int height;/ 身高 double weight;/ 體重 static int num;/ 人數(shù),public: / 公有函數(shù) People(char nm = 無名氏, int a = 16, int h = 168, int w = 118): age(a), height(h), weight(w) strcpy(name, nm); num+; void Eatting() weight+; / 進食 void Sporting() height+; / 運動 void

39、Show()const/ 顯示信息 cout 個人信息: endl; cout 姓名: name endl; cout 年齡: age 歲 endl; cout 身高: height 厘米 endl; cout 體重: weight 市斤 endl endl; static void ShowNum()/ 顯示人數(shù) cout 人數(shù): num endl; ; int People:num = 0;/ 初始化靜態(tài)數(shù)據(jù)成員num,int main()/ 主函數(shù)main() People p1;/ 定義對象 p1.Show();/ 顯示信息 People p2(李敏, 18, 170, 108);/

40、定義對象 p2.Eatting();/ 進食 p2.Sporting();/ 運動 p2.Show();/ 顯示信息 People:ShowNum();/ 顯示人數(shù) system(PAUSE);/ 調(diào)用庫函數(shù)system( ),輸出提示信息 return 0; / 返回值, 返回操作系統(tǒng),4定義一個描述員工(Employee)基本情況的類,數(shù)據(jù)成員包括編號(num)、姓名(name)、性別(sex)、工資(wage)、人數(shù)(count)、總工資(totalWage)。其中姓名定義為長度為18的字符數(shù)組,性別為為長度為3的字符數(shù)組,其它數(shù)據(jù)成員類型為整型,總工資和人數(shù)為靜態(tài)數(shù)據(jù)成員,函數(shù)成員包括

41、構(gòu)造函數(shù)、顯示基本數(shù)據(jù)函數(shù)(ShowBase)和顯示靜態(tài)數(shù)據(jù)函數(shù)(ShowStatic),其中構(gòu)造函數(shù)由已知參數(shù)編號(nu) 、姓名(nm) 、性別(sx)和工資(wg)構(gòu)造對象,顯示基本數(shù)據(jù)函數(shù)用于顯示學(xué)生的編號、姓名、性別和工資,顯示靜態(tài)數(shù)據(jù)函數(shù)為靜態(tài)成員函數(shù),用于顯示人數(shù)和總工資;要求所有數(shù)據(jù)成員為protected訪問權(quán)限,所有成員函數(shù)為public訪問權(quán)限,在主函數(shù)中定義若干個員工對象,分別顯示員工基本信息,以及顯示員工人數(shù)和總工資。 參考程序: #include / 編譯預(yù)處理命令 using namespace std;/ 使用命名空間std class Employee pro

42、tected: / 數(shù)據(jù)成員 int num;/ 編號 char name18;/ 姓名 char sex3;/ 姓名 int wage;/ 工資 static int count;/ 人數(shù) static int totalWage;/ 總工資,public: / 公有函數(shù) Employee(int nu, char nm, char sx, int wg): num(nu), wage(wg) strcpy(name, nm); strcpy(sex, sx); count+; totalWage += wg; ; void ShowBase()/ 顯示基本數(shù)據(jù) cout 個人基本信息: e

43、ndl; cout 學(xué)號: num endl; cout 姓名: name endl; cout 性別: sex endl; cout 工資: wage 元 endl endl; static void ShowStatic()/ 顯示靜態(tài)數(shù)據(jù) cout 人數(shù): count endl; cout 總工資: totalWage 元 endl; ; int Employee:count = 0;/ 初始化靜態(tài)數(shù)據(jù)成員count int Employee:totalWage = 0;/ 初始化靜態(tài)數(shù)據(jù)成員totalWage,int main()/ 主函數(shù)main() Employee e1(1008

44、, 李杰, 男, 2680);/ 定義對象 e1.ShowBase();/ 顯示基本數(shù)據(jù) Employee e2(1009, 李敏, 女, 2860);/ 定義對象 e2.ShowBase();/ 顯示基本數(shù)據(jù) e2.ShowStatic();/ 顯示靜態(tài)數(shù)據(jù) system(PAUSE);/ 調(diào)用庫函數(shù)system( ),輸出系統(tǒng)提示信息 return 0; / 返回值, 返回操作系統(tǒng),C+面向?qū)ο蟪绦蛟O(shè)計教程,第3章 模板 習(xí)題解答,一、選擇題,1下列關(guān)于模板的敘述中,錯誤的是 。 A)模板聲明中的第一個符號總是關(guān)鍵字template B)在模板聲明中用“”和“”括起來的部分是模板的類型形參

45、表 C)類模板不能有數(shù)據(jù)成員 D)在一定條件下函數(shù)模板的類型實參可以省略 解析:由模板聲明的格式可知選項A、B正確。在調(diào)用模板函數(shù)時,如果編譯系統(tǒng)從模板函數(shù)的類型實參表中得到的信息已經(jīng)能夠判斷部分或全部虛擬類型參數(shù)所對應(yīng)的實際類型,而且它們又正好是模板形參中最后的若干個參數(shù),則在模板類型實參表中可以省略這幾個參數(shù),選項D正確。類模板中可以有數(shù)據(jù)成員,數(shù)據(jù)成員的類型可以是虛擬類型,也可以是具體類型,選項C錯誤。 答案:C,2有以下函數(shù)模板定義: template ElemType Fun(const ElemType 解析:當(dāng)從模板函數(shù)類型實參表獲得的信息有矛盾時,模板類型實參不能省略。例如選項

46、C中,編譯系統(tǒng)從第一個參數(shù)3獲得的信息是ElemType對應(yīng)于int,而從第二個參數(shù)5.5處獲得的信息是ElemType對應(yīng)于double,兩者相互矛盾,因此,編譯時將產(chǎn)生錯誤。解決的方法之一是顯式給出虛擬類型參數(shù)ElemType對應(yīng)的模板類型實參,強制ElemType對應(yīng)于int。 答案:C,3關(guān)于關(guān)鍵字class和typename,下列表述中正確的是 。 A)程序中typename都可以替換為class B)程序中的class都可以替換為typename C)在模板類型形參表中只能用typename來聲明參數(shù)的類型 D)在模板類型形參表中只能用class或typename來聲明參數(shù)的類型

47、解析:程序中的typename都可以替換為class,但程序中的class不可以全部替換為typename。例如:在“模板類型形參表”中,關(guān)鍵字typename和class是可以互換的;但是在“類模板名”前的關(guān)鍵字class代表的含義是類,不可以用typename代替,選項B錯誤。在模板類型形參表中除了typename和class以外也可以用常規(guī)類型來聲明參數(shù)的類型,選項C、D錯誤。 答案:A,4有以下函數(shù)模板: template ElemType Square(const ElemType 其中ElemType是 。 A)函數(shù)形參B)函數(shù)實參 C)模板類型形參D)模板類型實參 解析:由函數(shù)模

48、板的定義可知ElemType為模板類型形參。 答案:C,5C+中的模板包括 。 A)對象模板和函數(shù)模板B)對象模板和類模板 C)函數(shù)模板和類模板D)變量模板和對象模板 解析:C+語言通過模板提供了一種將類型參數(shù)化的機制,其中包括函數(shù)模板和類模板。 答案:C,二、填空題,1已知一個函數(shù)模板的聲明如下: template T1 Fun(T2 n) return n * 5.0; 若要求以int型數(shù)7為函數(shù)實參調(diào)用該模板函數(shù),并返回一個double型數(shù),則該調(diào)用應(yīng)表示為 。 解析:當(dāng)虛擬類型類型參數(shù)作為函數(shù)的返回值類型,而函數(shù)的返回值類型與函數(shù)參數(shù)的類型可以不同時,不管函數(shù)類型實參的類型是什么,均不

49、能省略模板類型實參,此題的模板類型實參應(yīng)為。 答案:Fun(7,2已知int dbl(int n ) return n + n; 和long dbl(long n) return n + n; 是一個函數(shù)模板的兩個實例,則該函數(shù)模板的聲明是 template 解析:將類型int和long參數(shù)化,用模板類型參數(shù)ElemType代替,可得該函數(shù)模板。 答案:ElemType Dbl(ElemType n ) return n + n;,3下面程序的運行結(jié)果是 。 template ElemType Min(const ElemType / 返回值0, 返回操作系統(tǒng) 解析:模板函數(shù)Min()根據(jù)調(diào)用

50、它的實參類型的不同,生成不同的函數(shù)版本,例如,返回兩個int型數(shù)的最小值或返回兩個double型數(shù)的最小值。 答案:最小整數(shù)=4,最小實型=0.35,三、編程題,1試使用函數(shù)模板實現(xiàn)輸出一個數(shù)組各元素的值,要求編寫測試程序。 參考程序: #include / 編譯預(yù)處理命令 using namespace std;/ 使用命名空間std template void Display(ElemType a, int n)/ 輸出數(shù)組a各元素之值 for (int i = 0; i n; i+) cout ai ;/ 輸出ai cout endl;/ 換行 int main()/ 主函數(shù)main()

51、 int a = 1, 2, 3, 4, 5, 6, 7, 8, 9;/ 定義數(shù)組 Display(a, 9);/ 輸出a system(PAUSE);/ 調(diào)用庫函數(shù)system( ),輸出系統(tǒng)信息 return 0; / 返回值, 返回操作系統(tǒng),2編寫一個復(fù)數(shù)類模板Complex,其數(shù)據(jù)成員real和image的類型未知,定義相應(yīng)的成員函數(shù),包括構(gòu)造函數(shù)、輸出復(fù)數(shù)值的函數(shù)、求復(fù)數(shù)和的函數(shù)和求復(fù)數(shù)差的函數(shù),主函數(shù)中定義模板類對象,分別以int和double實例化類型參數(shù)。 參考程序: #include / 編譯預(yù)處理命令 using namespace std;/ 使用命名空間std / 聲明

52、復(fù)數(shù)類模板 template class Complex private: / 數(shù)據(jù)成員 ElemType real;/ 實部 ElemType image;/ 虛部 public: / 公有函數(shù) Complex(ElemType r = 0, ElemType i = 0): real(r), image(i) void Show() const;/ 輸出復(fù)數(shù) static Complex Add(const Complex,template void Complex:Show() const/ 輸出復(fù)數(shù) if (image Complex Complex:Add(const Complex

53、 / 返回復(fù)數(shù),int main()/ 主函數(shù)main() Complex z1(2, 3), z2(6, -5), z3;/ 定義復(fù)數(shù)對象 z1.Show();/ 輸出z1 z2.Show();/ 輸出z2 z3 = Complex:Add(z1, z2);/ z3=z1+z2 z3.Show();/ 輸出z3 z3 = Complex:Sub(z1, z2);/ z3=z1-z2 z3.Show();/ 輸出z3 Complex z4(2.1, 3.8), z5(6.8, -5.1), z6;/ 定義復(fù)數(shù)對象 z4.Show();/ 輸出z4 z5.Show();/ 輸出z5 z6 = C

54、omplex:Add(z4, z5);/ z6=z4+z5 z6.Show();/ 輸出z3 z6 = Complex:Sub(z4, z5);/ z6=z4-z5 z6.Show();/ 輸出z6 system(PAUSE);/ 調(diào)用庫函數(shù)system( ),輸出系統(tǒng)提示信息 return 0; / 返回值, 返回操作系統(tǒng),3編寫一個使用數(shù)組類模板Array對數(shù)組求最大值和求元素和的程序,要求編寫出測試程序。 參考程序: #include / 編譯預(yù)處理命令 using namespace std;/ 使用命名空間std / 聲明數(shù)組類模板 template class Array priv

55、ate: / 數(shù)據(jù)成員 ElemType *elem;/ 存儲數(shù)據(jù)元素值 int size;/ 數(shù)組元素個數(shù) public: / 公有函數(shù) Array(int sz): size(sz) elem = new ElemTypesize; / 構(gòu)造函數(shù) Array() delete elem; / 析構(gòu)函數(shù) void SetElem(ElemType e, int i);/ 設(shè)置元素值 ElemType GetElem(int i) const;/ 求元素值 ElemType Max() const;/ 求最大值 ElemType Sum() const;/ 求元素之和 ;,template v

56、oid Array:SetElem(ElemType e, int i)/ 設(shè)置元素值 if (i = size) cout ElemType Array:GetElem(int i) const/ 求元素值 if (i = size) cout 元素位置錯! endl; exit(2);/ 退出程序的運行,返回到操作系統(tǒng) return elemi;/ 返回元素值elemi,template ElemType Array:Max() const/ 求最大值 ElemType m = elem0;/ 設(shè)elem0最大 for (int i = 1; i m) m = elemi;/ 依次比較求最

57、大值 return m;/ 返回最大值 template ElemType Array:Sum() const/ 求元素之和 ElemType s = 0;/ 定義變量 for (int i = 1; i size; i+) s = s + elemi;/ 依次求和 return s;/ 返回和,int main()/ 主函數(shù)main() int a = 1, 9, 7, 5, 6, 3;/ 定義數(shù)組a int n = 6;/ 數(shù)組元素個數(shù) Array obj(n);/ 定義數(shù)組對象 int i;/ 定義變量 for (i = 0; i n; i+) obj.SetElem(ai, i);/

58、設(shè)置數(shù)組元素值 for (i = 0; i n; i+) cout obj.GetElem(i) ;/ 輸出元素值 cout endl;/ 換行 cout 最大值為: obj.Max() endl;/ 輸出最大值 cout 各元素和為: obj.Sum() endl;/ 輸出各元素之和 system(PAUSE);/ 調(diào)用庫函數(shù)system( ),輸出系統(tǒng)提示信息 return 0; / 返回值, 返回操作系統(tǒng),4對數(shù)組求最大值和求元素和的算法都編寫為函數(shù)模板,要求編寫出測試程序。 參考程序: #include / 編譯預(yù)處理命令 using namespace std;/ 使用命名空間std

59、 template ElemType Max(ElemType a, int n)/ 求最大值 ElemType m = a0;/ 設(shè)a0最大 for (int i = 1; i m) m = ai;/ 依次比較求最大值 return m;/ 返回最大值 template ElemType Sum(ElemType a, int n)/ 求元素之和 ElemType s = 0;/ 定義變量 for (int i = 1; i n; i+) s = s + ai;/ 依次求和 return s;/ 返回和,4對數(shù)組求最大值和求元素和的算法都編寫為函數(shù)模板,要求編寫出測試程序。 參考程序: in

60、t main()/ 主函數(shù)main() int a = 1, 9, 7, 5, 6, 3;/ 定義數(shù)組a int n = 6;/ 數(shù)組元素個數(shù) for (int i = 0; i n; i+) cout ai ;/ 輸出元素值 cout endl;/ 換行 cout 最大值為: Max(a, n) endl;/ 輸出最大值 cout 各元素和為: Sum(a, n) endl;/ 輸出各元素之和 system(PAUSE);/ 調(diào)用庫函數(shù)system( ),輸出系統(tǒng)提示信息 return 0; / 返回值, 返回操作系統(tǒng),5對數(shù)組求最大值和求元素和的函數(shù)采用靜態(tài)成員函數(shù)的方式封裝成數(shù)組算法類模

溫馨提示

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

評論

0/150

提交評論