C++課后習習題解答_第1頁
C++課后習習題解答_第2頁
C++課后習習題解答_第3頁
C++課后習習題解答_第4頁
C++課后習習題解答_第5頁
已閱讀5頁,還剩6頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第1章 面向對象的方法學1什么是面向對象方法學解:面向對象方法學就是盡量模擬人類習慣的思維方式,使軟件開發的方法與過程盡可能接近人類認識世界、解決問題的方法與過程,從而使描述問題的問題空間(即問題域)與實現解法的解空間(即求解域)在結構上盡可能一致。2什么是對象它與傳統的數據有何關系有什么不同解:對象是封裝了數據結構及可以施加在這些數據結構上的操作的封裝體。它與傳統數據有本質的不同,傳統數據是被動地等待對它進行處理,對象是進行處理的主體。3什么是封裝性和繼承性解:封裝是面向對象方法的一個重要特點,即將對象的屬性和行為封裝在對象的內部,形成一個獨立的單位,并盡可能隱蔽對象的內部細節。繼承性是子類

2、自動共享父類數據結構和方法的機制,這是類之間的一種關系。4什么是多態性解:多態性是面向對象方法的重要特征。不同的對象,收到同一消息可以產生不同的結果,這種現象稱為多態性。5試寫出學生管理系統中所涉及的類(屬性和方法)。學生管理系統中學生信息有:姓名、學號、年齡、成績;學生管理系統完成學生信息輸入、學生信息輸出、插入學生信息、刪除學生信息、查找學生信息。解:class Studentprivate: char cName12;ET Framework之上的高級程序設計語言。C#集C語言的簡潔強大、C+的面向對象、VB的圖形化設計方法、Java的編譯與執行機制等優點于一身。C#是創新性的新式編程語

3、言,它巧妙地結合了最常用的行業語言和研究語言中的功能,并引入了多種潛在的新功能,提高了開發人員在語言構造方面的效率,將快速的應用程序開發與對底層平臺各種功能的訪問緊密結合在一起,使得程序員能夠在.NET平臺上快速開發各種應用程序。7C+支持多態性主要表現在哪些方面解:C+支持兩種多態性,即編譯時的多態性和運行時的多態性。編譯時的多態性是通過重載來實現的,運行時的多態性是通過虛函數來實現的。思考題1設計一個棧類,實現的操作有初始化棧、入棧、出棧、判棧空。解:class Stackprivate: int top; int s100;public: void Ini_Stack(); 3o <

4、;<" "<< <<" "<<datai.score <<endl;2定義一個圖書類,圖書信息有圖書名稱、作者、出版社、價格。要求利用棧實現圖書的入庫、出庫和顯示等功能。const int MAXSIZE=5; ame<<" "<<datai.author<<" "<<datai.publish<<" "<<datai.price<<end

5、l;3有Distance類和Point類,將Distance類定義為Point類的友元類來實現計算兩點之間距離。第5章 靜態與命名控制1下列靜態數據成員的特性中,錯誤的是( D )。 A說明靜態數據成員時,前邊要加關鍵字static B靜態數據成員在類外進行初始化 C引用靜態數據成員時,要在靜態數據成員名前加<類名>和作用域運算符 D靜態數據成員不是所有對象所共有的2下列關于靜態數據成員的敘述,錯誤的是( A )。 A靜態數據成員在對象調用析構函數后,從內存中撤銷 B即使沒有實例化類,靜態數據成員也可以通過類名進行訪問 C類的靜態數據成員是該類所有對象所共享 D類的靜態數據成員需要

6、初始化3下列關于靜態成員的敘述中,錯誤的是( B )。 A類的外部可以直接調用類的靜態數據成員和靜態成員函數 B與一般成員一樣,只有通過對象才能訪問類的靜態成員 C類的靜態數據成員不能在構造函數中初始化 D類的一般成員函數可以調用類的靜態成員4聲明類的成員為靜態成員,必須在其前面加上關鍵字( B )。 AconstBstaticCpublicDvirtual 5靜態成員為該類的所有( B )共享。 A成員B對象Cthis指針D友元6程序運行結果:1237程序運行結果:CStatic:val=10思考題1利用靜態數據成員的概念,編寫一個類,統計目前存在多少個該類的對象。class Aprivat

7、e:static int n;public:A()n+;void Print()cout<<n<<endl;int A:n=0;int main()A a1;();A a5,a2; ();return 0;2利用靜態數據成員的概念,編寫一個學生類,學生信息包括姓名、學號、成績;統計學生的總人數及總成績,并輸出。#include "iostream"#include"iomanip"using namespace std;class Studentprivate:char *name;int stu_no;float score;s

8、tatic int total_num;static float total_score;public:Student(char *na,int no,float sco);void Print();int Student:total_num =0;float Student:total_score =0;int main()Student s1("張明",1,90);();Student s2("王蘭",2,95);();Student s3("于敏",3,87);();return 0;Student:Student(char *

9、na,int no,float sco)name=new charstrlen(na)+1;strcpy(name,na);stu_no=no;score=sco;total_num+;total_score=total_score+score;void Student:Print() cout<<"第"<<total_num<<"個學生:"<<name<<setw(4)<<stu_no<<setw(4)<<score <<endl;cout<

10、;<"總人數是:"<<total_num<<endl;cout<<"總分數是:"<<total_score<<endl;3利用靜態的概念,編寫一個小貓類,統計并輸出每個小貓的重量、小貓的總數量及總重量。class small_cat 態 綁定。在運行時確定函數調用稱為 動態 綁定。2如果A是從B繼承而來,則A叫 子 類,B叫 父 類。3在多重派生過程中,如果想使公共的基類在派生時只有一個副本,則可以將這個基類聲明為 虛基類 。二、選擇題1在類的繼承與派生過程中,關于派生類不正確的說法是(

11、B )。 A派生類可以繼承基類的所有特性B派生類只能繼承基類的部分特性 C派生類可以重新定義已有的成員D派生類可以改變現有成員的屬性2派生類對象對它的基類成員,(A )是可以訪問的。 A公有繼承的公有成員B公有繼承的私有成員 C公有繼承的保護成員D私有繼承的共有成員3下列敘述中不正確的是( C )。 A含純虛函數的類稱為抽象類B不能直接由抽象類建立對象 C抽象類不能作為派生類的基類D純虛函數沒有其函數的實現部分4當定義派生類的對象時,調用構造函數的正確順序是(A )。 A先調用基類的構造函數,再調用派生類的構造函數 B先調用派生類的構造函數,再調用基類的構造函數 C調用基類的構造函數和派生類的

12、構造函數的順序無法確定 D調用基類的構造函數和派生類的構造函數是同時進行的5關于多重繼承二義性的描述中,(D)是錯誤的。 A一個派生類的兩個基類中都有某個同名成員,在派生類中對這個成員的訪問可能出現二義性 B解決二義性最常用的方法是對成員名的限定 C基類和派生類中出現同名函數,也存在二義性 D一個派生類是從兩個基類派生而來的,而這兩個基類又有一個共同的基類,對該基類成員進行訪問時,也可能出現二義性6派生類的構造函數的成員初始化列表中,不能包含(C )。 A基類的構造函數B派生類的自對象的初始化 C基類的自對象的初始化D派生類的一般數據成員的初始化7下列關于protected成員說法,正確的是(

13、 A )。 A在派生類中仍然是protected的B具有private成員和public成員的雙重角色 C在派生類中是private的D在派生類中是public的8下列關于虛函數的說法,正確的是(C )。 A虛函數是一個static類型的成員函數 B虛函數是一個非成員函數 C基類中采用virtual聲明一個虛函數后,派生類中定義相同原型的函數時可以不加virtual聲明 D派生類中的虛函數與基類中相同原型的虛函數具有不同的參數個數或類型9關于虛函數和抽象類描述中,( C )是錯誤的。 A純虛函數是一種特殊的函數,它沒有具體實現 B抽象類是指具有純虛函數的類 C一個基類中聲明有純虛函數,則它的派

14、生類一定不再是抽象類 D抽象類只能作為基類來使用,其純虛函數的實現由派生類給出10下列程序,編譯時出現錯誤的是( C )。 class A 1 B. 2 C. 3 D. 4三、簡答題1簡要定義如下術語:繼承、虛函數、多重繼承。答:繼承性是自然界普遍存在的一種現象,是從先輩那里得到已有的特征和行為。類的繼承就是新類從已有類那里獲得已有的屬性和行為,或者說是基類派生了具有基類特征又有新特征的派生類。虛函數需要在函數前面加virtual說明。通過虛函數可以達到動態綁定效果。在類的派生過程中,如果基類名有多個,則這種繼承方式稱為多繼承,這時的派生類同時得到了多個已有類的特征。2分別說明什么是抽象基類什

15、么是虛基類當一個類中存在純虛函數時,這個類就是抽象類。如把一個基類定義為虛基類,必須在派生子類時在父類的名字前加關鍵字virtual。第8章 模 板1類模板的使用實際上是將類模板實例化成為一個具體的( D )。 A類B對象C函數D模板類2關于類模板,下列表述中不正確的是( B )。 A用類模板定義一個對象時,不能省略實參 B類模板只能有虛擬類型參數 C類模板本身在編譯中不會生成任何代碼 D類模板的成員函數都是模板函數3類模板的模板參數( )。 A只可作為數據成員的類型 B只可作為成員的返回類型 C只可作為成員函數的參數類型 D以上三者皆是4一個( )允許用戶為類定義一種模式,使得類中的某些數據

16、成員及某些成員函數的返回值能取任意類型。 A函數模板B模板函數C類模板D模板類5如果一個模板聲明列出了多個參數,則每個參數之間必須使用逗號隔開,每個參數都須重復使用關鍵字( D )。 AconstBstaticCvoidDclass6假設類模板Employee存在一個static數據成員salary,由該類模板實例化3個模板類,那么存在( D )個static數據成員的副本。 A0B1C2D37程序運行結果:120思考題1編寫一個使用類模板對數組進行排序、查找和求元素和的程序。const int SIZE=10; .輸入鏈表"<<endl;cout<<&quo

17、t;2.輸入鏈表"<<endl;cout<<"0.退出"<<endl;cout<<"請選擇"<<endl;cin>>n;switch (n)case 1:head1=new Node<T>head1->next =0;CreateLinkList(head1);break;case 2:head2=new Node<T>head2->next =0;CreateLinkList(head2);while(n);template<cl

18、ass T>void LinkList<T>:Print_LinkList( )int n;doNode<T> *p;cout<<"1.輸出鏈表"<<endl;cout<<"2.輸出鏈表"<<endl;cout<<"3.輸出合并后的鏈表"<<endl;cout<<"0.退出"<<endl;cout<<"請選擇"<<endl;cin>>n

19、;switch (n)case 1:p=head1->next;break;case 2:p=head2->next;break;case 3:Merge();p=head3->next ;if (n)while(p)cout<<p->data <<" "p=p->next;cout<<endl;while(n);template<class T>void LinkList<T>:CreateLinkList(Node<T> *h)int flag=-1,num=0;Nod

20、e<T> *s,*r;r=h;T x;cout<<"please input a value(-1 end):"<<endl;cin>>x;while(x!=flag)s=new Node<T>s->data=x;r->next=s;r=s;cin>>x;if(r!=NULL) r->next=NULL;template<class T>void LinkList<T>:Merge()Node<T> *p1;Node<T> *s,*r;p

21、1=head1->next;T aMaxlen,bMaxlen,cMaxlen;int i,j,k,l,n1,n2;i=0;n1=0;n2=0;while(p1)ai=p1->data ;p1=p1->next ;i+;n1+;p1=head2->next ;i=0;while(p1)bi=p1->data ;p1=p1->next ;i+;n2+;i=n1-1;j=n2-1;k=0;while(i>=0 && j>=0)if(ai>bj)ck+=ai-;elseck+=bj-;if(i>=0)for(l=i;l>

22、;=0;l-)ck+=al;elsefor(l=j;l>=0;l-)ck+=bl;head3=new Node<T>head3->next =0;r=head3;for(i=0;i<k;i+)s=new Node<T>s->data=ci;r->next=s;r=s;if(r!=NULL) r->next=NULL;4用類模板實現棧,功能有:判斷棧是否為空、入棧、出棧、讀棧頂元素。const int MAXSIZE=100; 文件,它包含了所有輸入/輸出操作所需要的信息。2成員函數 setf()和unsetf() 被用來設置和恢復格式

23、狀態標志。3要格式化流操縱元,必須包含頭文件 。流插入操作符是 << ,流提取操作符是 >> 。4C+中,數據文件類型分為( C )。 A文本文件和順序文件B順序文件和隨機文件 C文本文件和二進制文件D數據文件和文本文件5( A )是標準輸入流。 AcinBcoutCcerrDclog6關于提取和插入運算符,下列說法不正確的是( A )。 A可以重載為類的成員函數 B應該重載為類的友元函數 C提取運算符是從輸入字符序列中提取數據 D插入運算符是把輸出數據插入到輸出字符序列中7選擇下面程序的運行結果( D )。#include<>void main() int

24、 i=100; (ios:hex); cout<<i<<"t" cout<<i<<"t" (ios:dec); cout<<i<<endl; A64 100 64 B64 64 64 C64 64 100 D64 100 1008判斷正誤,如果不正確,說明原因。(1) 帶有long型參數的流成員函數flags( )用于根據參數設置標志狀態,并返回原來的設置。(正確)(2) 流插入操作符<<和流讀取操作符>> 被重載以處理所有的標準數據包括字符和內存地址(僅對流插入)和全部用戶自定義類型,而且可以作為成員函數定義。(不正確)9下面程序運行后,數據文件保存的結果是(1 3 5 7 9 )。#include <iostream>#include <f

溫馨提示

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

評論

0/150

提交評論