<span id="plx27"><var id="plx27"></var></span>
<dfn id="plx27"><var id="plx27"></var></dfn>
  • <span id="plx27"><code id="plx27"><input id="plx27"></input></code></span>
    <menu id="plx27"></menu><menuitem id="plx27"><thead id="plx27"><input id="plx27"></input></thead></menuitem>
  • <label id="plx27"><code id="plx27"></code></label>
    <label id="plx27"><button id="plx27"></button></label>

    《C面向對象程序設計》習題與上機解答-提交稿

    上傳人:文*** 文檔編號:33417370 上傳時間:2021-10-17 格式:DOC 頁數(shù):98 大?。?97KB
    收藏 版權申訴 舉報 下載
    《C面向對象程序設計》習題與上機解答-提交稿_第1頁
    第1頁 / 共98頁
    《C面向對象程序設計》習題與上機解答-提交稿_第2頁
    第2頁 / 共98頁
    《C面向對象程序設計》習題與上機解答-提交稿_第3頁
    第3頁 / 共98頁

    下載文檔到電腦,查找使用更方便

    8 積分

    下載資源

    還剩頁未讀,繼續(xù)閱讀

    資源描述:

    《《C面向對象程序設計》習題與上機解答-提交稿》由會員分享,可在線閱讀,更多相關《《C面向對象程序設計》習題與上機解答-提交稿(98頁珍藏版)》請在裝配圖網(wǎng)上搜索。

    1、 C+面向對象程序設計習題與上機實驗題解答陳維興 陳昕 編著人民郵電出版社 目 錄第1章 面向對象方法概述1.1 習題參考解答第2章 C+的初步知識2.1 習題參考解答2.2 上機實驗題參考解答第3章 類和對象3.1 習題參考解答3.2 上機實驗題參考解答第4章 類和對象的進一步討論4.1 習題參考解答4.2 上機實驗題參考解答第5章 繼承與派生5.1 習題參考解答5.2 上機實驗題參考解答第6章 多態(tài)性與虛函數(shù)6.1 習題與參考解答6.2 上機實驗題與參考解答第7章 運算符重載7.1 習題參考解答7.2 上機實驗題參考解答第8章 模板8.1 習題參考解答8.2 上機實驗題參考解答第9章 C+

    2、的輸入和輸出9.1 習題參考解答9.2 上機實驗題參考解答第10章 異常處理和命名空間10.1 習題參考解答10.2 上機實驗題參考解答第11章 綜合設計與實現(xiàn)11.1 習題參考解答11.2 上機實驗題參考解答第1章 面向對象方法概述1.1 習題參考解答【1.1】【解】面向過程程序設計的主要特征是:程序由過程定義和過程調用組成(所謂過程,簡單地說,就是程序執(zhí)行某項操作的一段代碼,函數(shù)是最常用的過程。),從這個意義出發(fā), 基于面向過程的程序可以用以下的公式來表述:程序 = 過程 + 調用【1.2】 【解】面向過程程序設計中普遍采用的優(yōu)化方法是使用結構化程序設計方法,其局限性至少有以下幾個方面:

    3、(1) 面向過程程序設計方法開發(fā)軟件的生產(chǎn)效率低下(2) 面向過程程序設計方法難以應付日益龐大的信息量和多樣的信息類型 (3) 面向過程程序設計方法難以適應各種新環(huán)境【1.3】 【解】 面向對象程序設計是一種新的程序設計范型。這種范型的主要特征是:程序 = 對象 + 消息對于面向對象的程序設計,程序員注重的是類的設計和編寫,即問題域中涉及幾個類,各個類之間的關系如何,每個類包含哪些數(shù)據(jù)和函數(shù)(操作代碼),再由類生成其對象。程序中的一切操作都是通過向對象發(fā)送消息來實現(xiàn)的,對象接收到消息后,啟動有關方法(通過成員函數(shù))完成相應的操作?!?.4】 【解】現(xiàn)實世界中的對象,具有以下特性:(1) 有一個

    4、名字:每一個對象必須有一個名字,稱為對象名,以區(qū)別于其他對象;(2) 有一組屬性:用屬性來描述它的某些特征,一般可以用數(shù)據(jù)來表示,所有的屬性都有值;(3) 有一組行為: 對象的行為或功能也稱為方法,一般用一組操作來描述;(4) 有一組接口:除施加于對象內部的操作外,對象還提供了一組公有操作用于與外界接口,從而可以與其他對象建立關系。【1.5】【解】在面向對象程序設計中,對象是描述其屬性的數(shù)據(jù)以及對這些數(shù)據(jù)施加的一組操作封裝在一起構成的統(tǒng)一體?!邦悺本褪蔷哂邢嗤臄?shù)據(jù)(屬性)和相同的操作代碼(函數(shù))的一組對象的集合。類和對象之間的關系是抽象和具體的關系。類是多個對象進行綜合抽象的結果,一個對象是

    5、類的一個實例。【1.6】 什么是消息?【解】面向對象程序設計技術必須提供一種機制允許一個對象與另一個對象的交互。這種機制叫消息傳遞。一個對象向另一個對象發(fā)出的請求被稱為“消息”?!?.7】 【解】在面向對象程序設計中的消息傳遞實際是對現(xiàn)實世界中的信息傳遞的直接模擬。調用對象中的函數(shù)就是向該對象傳送一個消息,要求該對象實現(xiàn)某一行為(功能)。對象所能實現(xiàn)的行為(功能),在程序設計方法中稱為方法,它們是通過調用相應的函數(shù)來實現(xiàn)的,在C+語言中方法是通過成員函數(shù)來實現(xiàn)的?!?.8】 【解】在面向對象程序設計中,抽象是通過特定的實例(對象)抽取共同特性后形成概念的過程。C和C+中的數(shù)據(jù)類型就是對一批具體

    6、的數(shù)的抽象。例如,“整型數(shù)據(jù)”是對所有整數(shù)的抽象。封裝是面向對象程序設計方法的一個重要特性,所謂封裝具有兩方面的含義:一是將有關的數(shù)據(jù)和操作代碼封裝在一個對象中,各個對象相對獨立、相不干擾。二是將對象中某些數(shù)據(jù)與操作代碼對外隱蔽,即隱蔽其內部細節(jié),只留下少量接口,以便與外界聯(lián)系,接收外界的消息。這種對外界隱蔽的做法稱為信息隱蔽。信息隱蔽有利于數(shù)據(jù)安全,防止無關人員訪問和修改數(shù)據(jù)?!?.9】 【解】以面向對象程序設計的觀點,繼承所表達的是類之間相關的關系。這種關系使得某一類可以繼承另外一個類的特征和能力。若類之間具有繼承關系,則它們之間具有下列幾個特性: (1) 類間具有共享特征(包括數(shù)據(jù)和操作

    7、代碼的共享); (2) 類間具有差別或新增部分(包括非共享的數(shù)據(jù)和操作代碼); (3) 類間具有層次結構。【1.10】 【解】從繼承源來分,繼承分為單繼承和多繼承。單繼承是指每個派生類只直接繼承了一個基類的特征。例如,圖1.1表示了一種單繼承關系。它表示W(wǎng)indows操作系統(tǒng)的窗口之間的繼承關系。 窗口對話窗口編輯窗口 圖1.1 單繼承示意圖多繼承是指多個基類派生出一個派生類的繼承關系。多繼承的派生類直接繼承了不止一個基類的特征。例如,小孩喜歡的玩具車即繼承了車的一些特性,還繼承了玩具的一些特征。如圖1.2所示。 車 玩具 玩具車圖1.2 多繼承示意圖【1.11】【解】多態(tài)性是面向對象程序的重

    8、要特征。多態(tài)性是指不同的對象收到相同的的消息時執(zhí)行不同的操作。例如,我們同樣雙擊Window系統(tǒng)桌面上的圖標時,有的是打開多媒體播放器,有的是打開資源管理器。多態(tài)性增強了軟件的靈活性和重用性,為軟件的開發(fā)與維護提供了極大的便利。尤其是采用了虛函數(shù)和動態(tài)聯(lián)編機制后,允許用戶以更為明確、易懂的方式去建立通用的軟件?!?.12】 【解】面向對象程序設計的優(yōu)點主要包括以下幾個方面:(1) 可提高程序的重用性面向對象程序設計方法能比較好地解決軟件重用的問題。對象所固有的封裝性和信息隱藏等機理,使得對象內部的實現(xiàn)與外界隔離,具有較強的獨立性,它可以作為一個大粒度的程序構件,供同類程序直接使用。有兩種方法可

    9、以重復使用一個對象類:一種方法是建立在各種環(huán)境下都能使用的類庫,供相關程序直接使用;另一種方法是從它派生出一個滿足當前需要的新類。繼承性機制使得子類不僅可以重用其父類的數(shù)據(jù)和程序代碼,而且可以在父類代碼的基礎上方便地修改和擴充,這種修改并不影響對原有類的使用。(2) 可控制程序的復雜性面向對象程序設計方法采用了封裝和信息隱藏技術,把數(shù)據(jù)及對數(shù)據(jù)的操作放在一個個類中,作為相互依存、不可分割的整體來處理。這樣,在程序中任何要訪問這些數(shù)據(jù)的地方都只需簡單地通過傳遞信息和調用方法來進行,這就有效地控制了程序的復雜性。(3) 可改善程序的可維護性在面向對象程序設計方法中,對對象的操作只能通過消息傳遞來實

    10、現(xiàn),所以只要消息模式即對應的方法界面不變,方法體的任何修改不會導致發(fā)送消息的程序修改,這顯然對程序的維護帶來了方便。另外,類的封裝和信息隱藏機制使得外界對其中的數(shù)據(jù)和程序代碼的非法操作成為不可能,這也就大大地減少了程序的錯誤率。(4) 能夠更好地支持大型程序設計類是一種抽象的數(shù)據(jù)類型,所以類作為一個程序模塊,要比通常的子程序的獨立性強的多,面向對象技術在數(shù)據(jù)抽象上又引入了動態(tài)連接和繼承性等機制,進一步發(fā)展了基于數(shù)據(jù)抽象的模塊化設計,使其更好地支持大型程序設計。(5) 增強了計算機處理信息的范圍面向對象程序設計方法把描述事物靜態(tài)屬性的數(shù)據(jù)結構和表示事物動態(tài)行為的操作放在一起構成一個整體,完整地、

    11、自然地表示客觀世界中的實體。用類來直接描述現(xiàn)實世界中的類型,可使計算機系統(tǒng)的描述和處理對象從數(shù)據(jù)擴展到現(xiàn)實世界和思維世界的各種事物,這實際上大大擴展了計算機系統(tǒng)處理的信息量和信息類型。第2章 C+的初步知識2.1 習題參考解答【2.1】【解】C+語言的主要特點表現(xiàn)在兩個方面,一是全面兼容C,并對C的功能作了不少擴允,二是增加了面向對象的機制。具體表現(xiàn)為:(1) C+是C的超集,C+保持與C的兼容,這就使許多C代碼不經(jīng)修改就可以為C+所用,用C編寫的眾多的庫函數(shù)和實用軟件基本上可以不加修改地用于C+。(2) C+ 是一個更好的C,它保持了C的簡潔、高效和接近匯編語言等特點,并對C的功能作了不少擴

    12、允。用C+編寫的程序比C更安全,可讀性更好,代碼結構更為合理。(3) 用C+編寫的程序質量高,從開發(fā)時間、費用到形成的軟件的可重用性、可擴充性、可維護性和可靠性等方面有了很大的提高,使得大中型的程序開發(fā)變得更加容易。(4) 增加了面向對象的機制, C+幾乎支持所有的面問對象程序設計特征,體現(xiàn)了近20年來在程序設計和軟件開發(fā)領域出現(xiàn)的新思想和新技術。C+語言最有意義的方面是支持面向對象的特征,然而,由于C+與C保持兼容,使得C+不是一個純正的面向對象的語言,C+既可用于面向過程的結構化程序設計,也可用于面向對象的程序設計?!?.2】 【解】#include /編譯預處理命令using names

    13、pace std; /使用命令空間stddouble circle(double r) /定義函數(shù)circle return 3.14*r*r;double triangle(double h,double w) /定義函數(shù)triangle return 0.5*h*w;int main() /定義主函數(shù)main double r,h,w; double cs,ts; coutrhw; /輸入圓的半徑和三角形高和底的值 cs= circle(r); /調用函數(shù)circle ts= triangle(h,w); /調用函數(shù)trianglecoutThe area of circle is: cs

    14、endl; /輸出圓的面積 coutThe area of triangle is:ts; /輸出三角形的面積 return 0;程序的一次運行結果如下:Input r,h,w:10 20 10The area of circle is: 314The area of triangle is:100【2.3】【解】B【2.4】【解】C【2.5】【解】C【2.6】【解】C【2.7】 【解】C【2.8】【解】A【2.9】【解】B【2.10】 【解】D【2.11】【解】D【2.12】【解】 C【2.13】【解】 D說明:“int *p=new int(5);”表示動態(tài)分配1個整型內存空間,初值為5;

    15、“int *p=new int5;”表示動態(tài)分配5個整型內存空間;“int *p=new int;”表示動態(tài)分配1個整型內存空間;“int *p=new int5(0)”想給一個數(shù)組分配內存空間時,對數(shù)組進行初始化,這是不允許的?!?.14】 【解】 D說明:name被定義為指向常量的常指針, 這個指針變量所指的地址不能改變,它所指向的地址中的數(shù)據(jù)也不能改變?!皀ame3=a;”修改了name所指向的地址中的數(shù)據(jù),“name=lin;”和“name=new char5;”修改了name所指的地址,只有D輸出一個字符是正確的?!?.15】 【解】 A說明:name被定義常指針,它所指向的地址中的

    16、數(shù)據(jù)能改變,但它所指的地址不能改變?!皀ame3=q;”修改了name所指向的地址中的數(shù)據(jù),是正確的。而“name=lin;”、“name=new char5;”和“name=new char(q);”以不同的方法修改了name所指的地址,都是錯誤的。【2.16】【解】 A說明:name被定義指向常量的指針, 它所指向的地址中的數(shù)據(jù)不能改變,但它所指的地址可以修改,而“name3=q;”修改了name所指向的地址中的數(shù)據(jù),是錯誤的?!皀ame=lin;” 、“name=new char5;”和“name= new char(q)”以不同的方法修改了name所指的地址,都是正確的。【2.17】【

    17、解】C【2.18】【解】 D說明:C+中不能建立引用數(shù)組和指向引用的指針,也不能建立引用的引用。所以A、B、C是錯誤的,D是正確的。【2.19】【解】A【2.20】【解】B【2.21】【解】(1) 這兩個函數(shù)原型是等價的,因為函數(shù)原型中的參數(shù)名可以缺省。(2) 這兩個函數(shù)的第一行是不等價的,函數(shù)的第一行中必須包含參數(shù)名?!?.22】【解】不可能通過編譯的原因是:在程序中,當一個函數(shù)的定義在后,而對它的調用在前時,必須將該函數(shù)的原型寫在調用語句之前,而在本程序中缺少函數(shù)原型語句。在語句“using namespace std;”后加上函數(shù)原型語句“sum(int a,int b);”就可通過編譯

    18、?!?.23】【解】本程序的運行結果如下:x+y=65【2.24】【解】本程序的運行結果如下:101說明: 在語句“:i=i+1;”中賦值號左邊“:i”的中i是全局變量,賦值號右邊的i是局部變量。所以執(zhí)行該語句的結果是將局部變量i的值加1(即101)后賦值給全局變量i?!?.25】【解】本程序的運行結果如下:10 10說明:函數(shù)f(&m,n)中 第1個參數(shù)是引用參數(shù), 引用參數(shù)是一種按地址傳遞參數(shù)的方法,對其的調用是傳地址調用;而第2個參數(shù)是變量參數(shù),對它的調用是傳值調用。所以調用函數(shù)f后, 實參a的值被改為10, 實參b的值不變,仍為10?!?.26】【解】本程序的運行結果如下:1020說明

    19、:函數(shù)f的參數(shù)是變量的引用, 對它的調用是傳地址調用,所以函數(shù)f調用后,主函數(shù)中k的值變?yōu)?0。又由于m是對函數(shù)f的引用,當m被賦值為20時,k的值也變?yōu)?0 ?!?.27】 【解】程序的作用是:輸入3個整數(shù),然后輸出其中值最大的數(shù)。在主函數(shù)中輸入3個整數(shù),然后調用f函數(shù),在f函數(shù)中實現(xiàn)找最小的整數(shù),用if語句比較兩個數(shù),將大者存放在變量m中,經(jīng)過兩個if語句的比較,m中存放的是3個整數(shù)中最大的數(shù)。運行情況如下:2 4 7 (輸入3個整數(shù))7 (輸出其中最大的數(shù))【2.28】 【解】實現(xiàn)本題功能的程序如下:#include#includeusing namespace std;int main

    20、() float x,y; coutxy; float z=pow(x,y); coutpow(x,y)=zendl; return 0;本程序的運行結果是:please input 2 floats to x,y:2.1 3pow(2.1,3)=9.261說明:由于要用到系統(tǒng)函數(shù)pow(x,y),所以要包含頭文件cmath?!?.29】【解】實現(xiàn)本題功能的程序如下:#include using namespace std;int main() int *p=new int20; /動態(tài)分配20個整型內存空間 *p=1; *(p+1)=1; /對前面2個內存空間賦值1 cout*pt*(p+1

    21、)t; p=p+2; /p指向第3個內存空間 for (int i=3;i=20;i+) *p=*(p-1)+*(p-2); cout*pt; if (i%5=0) coutendl;p+; /p指向下一個內存空間;return 0;本程序的運行結果是:1 1 2 3 58 13 21 34 5589 144 233 377 610987 1597 2584 4181 6765【2.30】 【解】實現(xiàn)本題功能的程序如下:#include #include using namespace std;double sroot(int i) return sqrt(i);double sroot(lo

    22、ng l) return sqrt(l); double sroot(double d) return sqrt(d);int main() int i=12; long l=1234; double d=12.34;couti的二次方根是:sroot(i)endl;coutl的二次方根是:sroot(l)endl;coutd的二次方根是:sroot(d)Close Workspace(關閉工作區(qū))”命令,則結束對該程序的的操作。若要退出VC+環(huán)境,則執(zhí)行“File(文件)-Exit(退出)”命令?!具\行結果】Hello!This is a program.【2.2】 【錯誤分析】 編譯程序,

    23、提示有4個error錯誤,1個warming錯誤。 編譯出錯信息告知在第3行有2個error錯誤,第1個錯誤的原因是cout未經(jīng)聲明,第2個錯誤的原因是運算符“”不合法。這都是因為流對象cout是標準的輸出流對象,它在文件iostream中聲明,因此必須包含頭文件iostream。因此應添加以下語句:#includeusing namespace std; 編譯出錯信息告知在第5行有2個error錯誤。第1個error錯誤的原因是運算符“”不合法,原因與第3行的相同。第5行的第2個error錯誤原因是第5行少了1個分號“;”,這是因為每條語句需要由分號作為結束符。也許讀者要問,明明這兩個錯誤都

    24、是出現(xiàn)在第4行,為什么說成第5行有錯呢?這是因為C+允許將一條語句分寫成幾行,檢查完第4行沒有分號后,必須檢查下一行,直到發(fā)現(xiàn)第5行的“” 前都沒有“;” 時,才判定出錯。因此在第5行報錯。修改方法是:在第5行語句的末尾加上“;”。 編譯出錯信息告知第5行有1個warming錯誤,原因是main函數(shù)默認的返回值類型是int, 而main函數(shù)中沒有返回值。修改方法:在“”前加上返回語句“return 0;”。【修改后的程序】/test2_2_1_2.cpp#includeusing namespace std;int main() coutHello!n; coutWelcome to C+!e

    25、ndl; return 0;【運行結果】Hello!Welcome to C+!(2)/test2_2_2_1.cpp#includeusing namespace std;int main() int x,y; x=5; y=6; int z=x*y; coutx*y=zendl; return 0;)【錯誤分析】 編譯程序,提示有2個error錯誤。第1個錯誤信息告知在第11行出錯,出錯原因是“” 錯寫成“)”; 由于同樣的原因造成了第2個錯誤,即第12行找不到文件的結束符。修改方法:將“)”改為“”。 【修改后的程序】/test2_2_2_2.cpp#includeusing names

    26、pace std;int main() int x,y; x=5; y=6; int z=x*y; coutx*y=zendl; return 0;【運行結果】x*y=30(3)/test2_2_3_1.cpp#includeusing namespace std; int main() void fun(int,int&); int x,y; fun(3,x); fun(4,y); coutx+y=x+yendl; return 0;void fun(int m,int &n) n=m*5【錯誤分析】本題有兩處錯誤:) 語句“coutx+y=x+yendl;”缺少一個“”號,應將其修改為:

    27、coutx+y=x+yendl;) 函數(shù)fun中的語句“n=m*5”缺少一個“;”號,應將其修改為:n=m*5;【修改后的程序】/test2_2_3_2.cpp#includeusing namespace std;int main() void fun(int,int&); int x,y; fun(3,x); fun(4,y); coutx+y=x+yendl; return 0;void fun(int m,int &n) n=m*5;【運行結果】x+y=35 【結果分析】 使用引用作函數(shù)的形參時,調用函數(shù)的實參要用變量名。實參傳遞給形參,相當于在被調用函數(shù)中使用了實參的別名。于是,在被

    28、調用函數(shù)中對形參的操作實質是對實參的操作,即數(shù)據(jù)的傳遞是雙向的。 程序在第1次調用fun()時,使得x得到的值是15;程序在第2次調用fun()時,使得y得到的值是35。【2.3】 【參考程序】/test2_3.cpp#includeusing namespace std;int maxl(int x,int y) return(xy ? x:y);int maxl(int x,int y,int z) int temp=maxl(x,y);return(tempz ? temp:z);double maxl(double x,double y) return(xy ? x:y);double

    29、 maxl(double x,double y,double z) double temp=maxl(x,y); return(tempz ? temp:z);char maxl(char x,char y) return(xy ? x:y);int maxl(char x,char y,char z) int temp=maxl(x,y);return(tempz ? temp:z);int main() int x1,x2;double d1,d2;char c1,c2;x1=maxl(3,5);x2=maxl(4,5,8);c1=maxl(a,b);c2=maxl(d,e,h);d1=m

    30、axl(3.1,5.6);d2=maxl(15.3,13.4,27.8);coutmaxl(3,5)=x1endl;coutmaxl(4,5,8)=x2endl;coutmaxl(3.1,5.6)=d1endl;coutmax1(15.3,13.4,27.8)=d2endl;coutmaxl(a,b)=c1endl;coutmaxl(d,e,h)=c2endl;return 0;【運行結果】maxl(3,5)=5maxl(4,5,8)=8maxl(3.1,5.6)=5.6max1(15.3,13.4,27.8)=27.8maxl(a,b)=bmaxl(d,e,h)=h【2.4】 【參考程序】/

    31、test2_4.cpp#includeusing namespace std;void change(char&,char&);int main() char x,y;cinxy;if(xy)change(x,y); /如果xy,使x和y的值互換coutmax=x min=yendl;return 0;void change(char &t1,char &t2) /函數(shù)的作用是使t1與t2互換 char temp;temp=t1;t1=t2;t2=temp;【運行結果】g jmax=j min=g【2.5】【參考程序】/test2_5.cpp#includeusing namespace st

    32、d;int main() double *r; r=new double; cin*r; coutArea is:3.14*(*r)*(*r)endl; delete r;return 0;【運行結果】12.34Area is:478.145第3章 類和對象3.1 習題參考解答【3.1】 【解】 類聲明的一般格式如下:class 類名public: 公有數(shù)據(jù)成員;公有成員函數(shù);private:私有數(shù)據(jù)成員;私有成員函數(shù); ;類的聲明由關鍵字class打頭,后跟類名,花括號中是類體,最后以一個分號“;”結束?!?.2】【解】C【3.3】【解】B【3.4】【解】B【3.5】【解】D【3.6】【解】

    33、B說明:C+中對構造函數(shù)有一些規(guī)定:不能帶返回值;可以不帶參數(shù);也可以缺省定義;但構造函數(shù)的名字與類名必須完全相同?!?.7】【解】B【3.8】【解】C【3.9】【解】C【3.10】【解】B【3.11】【解】C說明:C+中對析構函數(shù)也有一些規(guī)定:沒有參數(shù);不能重載;析造函數(shù)的名字與是在類名前加“”;析構函數(shù)不能指定返回類型?!?.12】 【解】C【3.13】【解】C【3.14】【解】B【3.15】【解】D【3.16】 【解】語句(1)使用帶默認參數(shù)的構造函數(shù),或不帶參數(shù)的構造函數(shù),定義了point類的兩個對象p2和p3;語句(2)在建立新對象p2時,用已經(jīng)存在的對象P1去初始化新對象p2,在這

    34、個過程中用“賦值法”調用了拷貝構造函數(shù)。語句(3)在建立新對象p2時,用已經(jīng)存在的對象P1去初始化新對象p2,在這個過程中用“代入法”調用了拷貝構造函數(shù)。語句(4)將對象p1數(shù)據(jù)成員的值拷貝到對象p4中, 這個過程是通過默認賦值運算符函數(shù)實現(xiàn)的?!?.17】【解】本程序的運行結果如下:Exit maindst 55【3.18】【解】本程序的運行結果如下: Counting at 0 Counting at 1 Counting at 2 Counting at 3 Counting at 4 Counting at 5 Couhting at 6 Counting at 7 Counting

    35、at 8 Counting at 9說明:在本程序中主函數(shù)main只包括了一個return語句,但竟然有內容輸出!什么時候調用了構造函數(shù)?我們知道,構造函數(shù)在對象被定義時調用。那么對象anObject是何時被調用的呢?在主函數(shù)main之前,語句“test anObject”處?!?.19】【解】本程序的運行結果如下:Con.Copy con.default.【3.20】【解】 第1個錯誤:printStu()和setSno兩個成員函數(shù)沒有用public定義,不允許外部函數(shù)對對象進行操作。第2個錯誤:成員函數(shù)在類外定義,應加上類名“Student:”。第3個錯誤:setAge應在類中說明,并且在

    36、類外定義時,應加上類名“Student:”?!?.21】【解】構造函數(shù)Point是私有的,語句“Point cpoint;”執(zhí)行時出現(xiàn)錯誤?!?.22】【解】 實現(xiàn)本題功能的程序如下:#include using namespace std;class Circlepublic: Circle(float r)radius=r; float area()return 3.14*radius*radius;private: float radius;int main() float r;coutr;Circle p(r);cout半徑為r的圓的面積為:p.area()endl;return 0;

    37、程序的運行結果是:請輸入圓的半徑:3半徑為3的圓的面積為:28.26【3.23】 【解】實現(xiàn)本題功能的程序如下:#include using namespace std;class cylinderpublic: cylinder(double a,double b); void vol();private: double r,h; double volume;cylinder:cylinder(double a,double b) r=a; h=b; volume=3.141592*r*r*h;void cylinder:vol() coutvolume is:volumen;int mai

    38、n() cylinder x(2.2,8.09); x.vol();return 0;程序的運行結果是:volume is:123.011【3.24】【解】實現(xiàn)本題功能的程序如下:#include using namespace std;class Date public: Date() Date(int y,int m,int d) year=y; mon=m; day=d; Date(Date&d) year=d.year; mon=d.mon; day=d.day; void SetDate(int Y,int m,int d) year=Y; mon=m; day=d; void pr

    39、intDate() cout日期是:year年mon月day日endl; int GetYear() return year; int GetMonth() return mon; int GetDay() return day; private: int day,mon,year;void main() Date d1(2010,6,8);cout日期是:d1.GetYear()年d1.GetMonth()月d1.GetDay()日endl; Date d2; d2.SetDate(2010,8,1);d2.printDate(); Date d3(d1);d3.printDate();程序

    40、的運行結果是:日期是:2010年6月8日日期是:2010年8月1日日期是:2010年6月8日3.2 上機實驗題參考解答【3.1】 (1)【運行結果】Copy-initialization Constructor is calledCopy-initialization Constructor is calledp3=(3,4)Destructor is callededDestructor is callededDestructor is calleded (2)【運行結果】Constructor is Called.Copy-initialization Constructor is cal

    41、ledCopy-initialization Constructor is calledp3=(3,4)Destructor is callededDestructor is callededDestructor is calleded【結果分析】 創(chuàng)建對象p1時,調用帶有兩個參數(shù)的構造函數(shù),輸出第1行結果。 創(chuàng)建對象p2和p3時,調用拷貝構造函數(shù),輸出第2行和第3行結果。 當程序運行結束,釋放對象p3、p2和p1時, 分別調用析構函數(shù)輸出最后3行結果。(3)【錯誤分析】 調試程序時,發(fā)現(xiàn)添加的兩條語句有錯。這是因為Coordinate類中沒有提供適合創(chuàng)建對象p4和p5的構造函數(shù)。為了解決這個

    42、問題,可以增加一個默認構造函數(shù)和帶一個參數(shù)的構造函數(shù),但最簡單的方法是修改帶有兩個參數(shù)的構造函數(shù), 使參數(shù)帶有默認值。如: Coordinate(int x1=0,int y1=0);這樣,創(chuàng)建對象p4時,2個參數(shù)分別使用默認值0和0;而創(chuàng)建對象p5時, 第1個參數(shù)為2,第2個參數(shù)使用默認值0。(4) 【運行結果】Constructor is Called.Copy-initialization Constructor is calledCopy-initialization Constructor is calledp3=(3,4)Constructor is Called.Construc

    43、tor is Called.Destructor is callededDestructor is callededDestructor is callededDestructor is callededDestructor is calleded【結果分析】從輸出結果可以看出,程序調用了3次構造函數(shù),2次拷貝構造函數(shù)。 創(chuàng)建對象時,將根據(jù)參數(shù)的情況調用相應的構造函數(shù)。程序在執(zhí)行語句Coordinate pl(3,4);Coordinate p4;Coordinate p5(2);創(chuàng)建對象p1、p4和p5時,調用了3次構造函數(shù)。 當用類的一個對象去創(chuàng)建該類的另一個對象時,將調用拷貝構造函數(shù)。程

    44、序在執(zhí)行語句Coordinate p2(p1);Coordinate p3=p2;創(chuàng)建對象p2和p3時,調用了2次拷貝構造函數(shù)?!?.2】【參考程序】/test3_2.cpp#includeusing namespace std;#includeclass magic /聲明魔方類magicpublic: void getdata(); /輸入初值成員函數(shù) void setfirstmagic(); /設置初始魔方成員函數(shù) void generatemagic(); /生成最終魔方成員函數(shù) void printmagic(); /顯示魔方成員函數(shù)private:int m44; int ste

    45、p; /相鄰元素之間的差值 int first; /起始值 int sum; /最大元素值和最小元素值的和;void magic:getdata() /輸入初值成員函數(shù) coutfirst; coutstep;void magic:setfirstmagic() /設置初始魔方成員函數(shù) int i,j; int tmp; tmp=first; for (i=0;i4;i+) for (j=0;j4;j+) mij=tmp; tmp+=step; void magic:generatemagic() /生成最終魔方成員函數(shù) sum=m00+m33; for (int i=0,j=0;i4;i+,

    46、j+) mij=sum-mij; for( i=0,j=3;i4;i+,j-) mij=sum-mij;void magic:printmagic() /顯示魔方成員函數(shù) int i,j; for (i=0;i4;i+) for (j=0;j4;j+) coutsetw(5)mij; coutendl; int main() magic A; A.getdata(); A.setfirstmagic(); cout初始魔方如下:endl; A.printmagic(); A.generatemagic(); cout最終魔方如下:endl; A.printmagic(); return 0;【

    47、運行結果】程序的一次執(zhí)行結果如下:輸入4*4魔方起始值:1輸入相鄰元素差值:2初始魔方如下: 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31最終魔方如下: 31 3 5 25 9 21 19 15 17 13 11 23 7 27 29 1【3.3】【參考程序】 /test3_3.cpp#include#includeusing namespace std;const len=5;int main() int i;void Reverse(string s);string strlen=Germany,Japan,America,Britain,Franc

    48、e;cout按逆轉前的順序輸出字符串:endl;for(i=0;ilen;i+) coutstri ; /按逆轉以前的順序輸出字符串 coutendl;Reverse(str); /進行逆轉cout按逆轉后的順序輸出字符串:endl;for(i=0;ilen;i+) coutstri ; /按逆轉后的順序輸出字符串 coutendl;return 0;void Reverse(string s) string t; for( int i=0;ilen/2;i+) t=si; si=slen-1-i; slen-1-i=t;【運行結果】按逆轉前的順序輸出字符串:Germany Japan Ame

    49、rica Britain France按逆轉后的順序輸出字符串:France Britain America Japan Germany第4章 類和對象的進一步討論4.1 習題參考解答【4.1】【解】 所謂對象數(shù)組是指每一數(shù)組元素都是對象的數(shù)組,也就是說,若一個類有若干個對象,我們把這一系列的對象用一個數(shù)組來存放。對象數(shù)組的元素是對象,不僅具有數(shù)據(jù)成員,而且還有函數(shù)成員?!?.2】【解】對象指針就是用于存放對象地址的變量。聲明對象指針的一般語法形式為: 類名* 對象指針名;【4.3】【解】B【4.4】【解】C【4.5】【解】B說明:C+中規(guī)定,在建立對象前就可以為靜態(tài)數(shù)據(jù)成員賦值。同時規(guī)定在靜態(tài)成員函數(shù)中不能使用this指針;靜態(tài)成員函數(shù)在類外定義時,不需要用static前綴;靜態(tài)成員函數(shù)既可以在類內定義也可以在類外定義?!?.6】【解】D 【4.7】【解】C 【4.8】【解】D 【4.9】【解】A【4.10】【解】A

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

    copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權所有   聯(lián)系電話:18123376007

    備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


    本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對上載內容本身不做任何修改或編輯。若文檔所含內容侵犯了您的版權或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!

    欧美久久久一区二区三区,国产精品亚洲一区二区无码,亚洲国产精品综合久久20声音,亚洲国产精品无码久久久蜜芽
    <span id="plx27"><var id="plx27"></var></span>
    <dfn id="plx27"><var id="plx27"></var></dfn>
  • <span id="plx27"><code id="plx27"><input id="plx27"></input></code></span>
    <menu id="plx27"></menu><menuitem id="plx27"><thead id="plx27"><input id="plx27"></input></thead></menuitem>
  • <label id="plx27"><code id="plx27"></code></label>
    <label id="plx27"><button id="plx27"></button></label>