版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、第一章:面向?qū)ο蟪绦蛟O計概述1_1 什么是面向?qū)ο蟪绦蛟O計?面向?qū)ο蟪绦蛟O計是一種新型的程序設計范型。這種范型的主要特征是:程序 =對象+消息。面向?qū)ο蟪绦虻幕驹厥菍ο?,面向?qū)ο蟪绦虻闹饕Y(jié)構(gòu)特點是:第一:程序一般由類的定義和類的使用兩部分組成,在主程序中定義各對象并規(guī)定它們之間傳遞消息的規(guī)律。第二:程序中的一切操作都是通過向?qū)ο蟀l(fā)送消息來實現(xiàn)的,對象接受到消息后,啟動有關方法完成相應的操作。面向?qū)ο蟪绦蛟O計方法模擬人類習慣的解題方法,代表了計算機程序設計新穎的思維方式。這種方法的提出是軟件開發(fā)方法的一場革命,是目前解決軟件開發(fā)面臨困難的最有希望、最有前途的方法之一。1_2 什么是類?什么
2、是對象?對象與類的關系是什么?在面向?qū)ο蟪绦蛟O計中,對象是描述其屬性的數(shù)據(jù)以及對這些數(shù)據(jù)施加的一組操作封裝在一起構(gòu)成的統(tǒng)一體。對象可以認為是:數(shù)據(jù)+操作在面向?qū)ο蟪绦蛟O計中,類就是具有相同的數(shù)據(jù)和相同的操作的一組對象的集合,也就是說,類是對具有相同數(shù)據(jù)結(jié)構(gòu)和相同操作的一類對象的描述。類和對象之間的關系是抽象和具體的關系。類是多個對象進行綜合抽象的結(jié)果,一個對象是類的一個實例。在面向?qū)ο蟪绦蛟O計中,總是先聲明類,再由類生成對象。類是建立對象的“摸板 ”,按照這個摸板所建立的一個個具體的對象,就是類的實際例子,通常稱為實例。1_3 現(xiàn)實世界中的對象有哪些特征?請舉例說明。對象是現(xiàn)實世界中的一個實體
3、,其具有以下一些特征:1/89( 1)每一個對象必須有一個名字以區(qū)別于其他對象。( 2)需要用屬性來描述它的某些特性。( 3)有一組操作,每一個操作決定了對象的一種行為。( 4)對象的操作可以分為兩類:一類是自身所承受的操作,一類是施加于其他對象的操作。例如:雇員劉名是一個對象對象名:劉名對象的屬性:年齡: 36 生日:工資: 2000 部門:人事部對象的操作:吃飯開車1_4 什么是消息?消息具有什么性質(zhì)?在面向?qū)ο蟪绦蛟O計中,一個對象向另一個對象發(fā)出的請求被稱為“消息 ”。當對象接收到發(fā)向它的消息時,就調(diào)用有關的方法,執(zhí)行相應的操作。消息是一個對象要求另一個對象執(zhí)行某個操作的規(guī)格的說明,通過
4、消息傳遞才能完成對象之間的相互請求或相互協(xié)作。消息具有以下3 個性質(zhì):( 1)同一個對象可以接收不同形式的多個消息,做出不同的響應。( 2)相同形式的消息可以傳遞給不同的對象,所做出的響應可以是不同的。( 3)消息的發(fā)送可以不考慮具體的接收者,對象可以響應消息,也可以不響應。1_5 什么是方法?消息和方法的關系是什么?在面向?qū)ο蟪绦蛟O計中,要求某一對象作某一操作時,就向該對象發(fā)送一個響應的消息,當對象接收到發(fā)向它的消息時,就調(diào)用有關的方法,執(zhí)行響應的操作。方法就是對象所能執(zhí)行的操作。方法包括界面和方法體兩部分。方法的界面也就是消息的模式,它給出了方法的調(diào)用協(xié)議;方法體則是實現(xiàn)某種操作的一系列計
5、算步驟,也就是一段程序。在C+語言中方法是通過函數(shù)來實現(xiàn)的,2/89稱為成員函數(shù)。消息和方法的關系是:對象根據(jù)接收到的消息,調(diào)用相應的方法;反過來,有了方法,對象才能響應相應的消息。1_6 什么是封裝和抽象?請舉例說明。在現(xiàn)實世界中,所謂封裝就是把某個事物包圍起來,使外界不知道該事物的具體內(nèi)容。在面向?qū)ο蟪绦蛟O計中,封裝是指把數(shù)據(jù)和實現(xiàn)操作的代碼集中起來放在對象內(nèi)部,并盡可能隱蔽對象的內(nèi)部細節(jié)。對象好象是一個不透明的黑盒子,表示對象屬性的數(shù)據(jù)和實現(xiàn)各個操作的代碼都被封裝在黑盒子里,從外面是看不見的,更不能從外面直接訪問或修改這些數(shù)據(jù)及代碼。使用一個對象的時候,只需要知道它向外界提供的接口形式而
6、無需知道它的數(shù)據(jù)結(jié)構(gòu)細節(jié)和實現(xiàn)操作的算法。封裝機制可以將對象的使用者與設計者分開,使用者不必知道對象行為實現(xiàn)的細節(jié),只需要使用設計者提供的接口讓對象去做。抽象是人類認識問題的最基本的手段之一。它忽略了一個主題中與當前目標無關的那些方面,以便更充分地注意與當前目標有關的方面。抽象是對復雜世界的簡單表示,抽象強調(diào)感興趣的信息,忽略了不重要的信息。例如,設計一個學籍管理程序的過程中,考察某個學生對象時,只關心他的姓名、學好、成績等,而對他的身高、體重等信息就可以忽略。以一般觀點而言,抽象是通過特定的實例(對象)抽象共同性質(zhì)以后形成概念的過程。抽象是對系統(tǒng)的簡化描述或規(guī)范說明,它強調(diào)了系統(tǒng)中的一部分細
7、節(jié)和特性,而忽略了其他部分。抽象包括兩個方面:數(shù)據(jù)抽象和代碼抽象(或稱為行為抽象)。前者描述某類對象的屬性或狀況,也就是此類對象區(qū)別于彼類對象的特征物理量;后者描述了某類對象的共同行為特征或具有的共同操作。在面向?qū)ο蟪绦蛟O計方法中,對一個具體問題的抽象分析的結(jié)果,是通過類來描述和實現(xiàn)的?,F(xiàn)在以學生管理程序為例,通過對學生進行歸納、分析,抽取出其中的共性,可以得到如下的抽象描述:3/89共同的屬性:姓名、學號、成績等,他們組成了學生數(shù)據(jù)抽象部分。用C+語言的數(shù)據(jù)成員來表示,可以是:char *name。 int number。 float score。共同的行為:數(shù)據(jù)錄入、數(shù)據(jù)修改和數(shù)據(jù)輸出等,
8、這構(gòu)成了學生的行為抽象部分,用 C+語言的成員函數(shù)表示,可以是:input()。modify() 。print() 。 如果我們開發(fā)一個學生健康檔案程序,所關心的特征就有所不同了??梢姡词箤ν粋€研究對象,由于所研究問題的側(cè)重點不同,就可能產(chǎn)生不同的抽象結(jié)果。1_7 什么是繼承?請舉例說明。繼承所表達的是對象類之間的相關關系,這種關系使得某類對象可以繼承另一類對象的特征和能力?,F(xiàn)實生活中,繼承是很普遍和容易理解的。例如我們繼承了父母的一些特征,如種族、血型、眼睛的顏色等,父母是我們所具有的屬性的基礎。繼承所表達的是對象之間相關的關系。這種關系使得某一類可以繼承另一個類的特征和能力。1_8 若
9、類之間具有繼承關系,則它們之間具有什么特征?( 1)類間具有共享特征(包括數(shù)據(jù)和操作代碼的共享)( 2)類間具有差別或新增部分(包括非共享的數(shù)據(jù)和代碼操作)( 3)類間具有層次結(jié)構(gòu)假設有兩個類 A 和 B,若類 B 繼承類 A ,則類 B 包含了類 A 的特征(包括數(shù)據(jù)和操作),同時也可以加入自己所特有的新特性。這時,我們稱被繼承類A 為基類或父類或超類;而稱繼承類B 為 A 類的派生類或子類。同時,我們還可以說,類 B 是從類 A 中派生出來的。1_9 什么是單繼承、多繼承?請舉例說明。從繼承源上分,繼承分為單繼承和多繼承。單繼承是指每個派生類只直接繼承了一個基類的特征。多繼承是指多個基類派
10、生出一個派生類的繼承關系。多4/89繼承的派生類直接繼承了不止一個基類的特征。例如:小孩的玩具車繼承了車的一些特性,還繼承了玩具的一些特征。1_10 什么是多態(tài)性?舉例說明。多態(tài)性也是面向?qū)ο蟪绦蛟O計的重要特性。它是指不同的對象收到相同的消息時產(chǎn)生不同的行為方式。例如我們同樣雙擊windows 系統(tǒng)桌面上的圖標時,有的是打開多媒體播放器,有的是打開資源管理器。利用多態(tài)性,用戶只需發(fā)送一般形式的消息,而將所有的實現(xiàn)留給接收消息的對象。對象根據(jù)所收到的消息做出相應的動作。1_11 什么是函數(shù)重載和運算符重載?為什么要使用重載?重載一般包括函數(shù)重載和運算符重載。函數(shù)重載是指一個表示符可同時用于為多個
11、函數(shù)命名,而運算符重載是指一個運算符可同時用于多種運算。也就是說,相同名字的函數(shù)或運算符在不同的場合可以表現(xiàn)出不同的行為。使用重載的目的是為了更好地表達行為共享,這種行為共享就象將相似的操作劃分在一起。使用重載可以使程序員在只知道操作的一般含義,而不知道操作的具體細節(jié)的情況下能正確地對某個對象使用一個操作。另外,使用重載的直接益處是減少了程序員記憶操作的名字的負擔。第二章 ::C+基礎2_1簡述 C+的主要特點( 1) C+保持與 C 的兼容,用 C 編寫的軟件可以用到 C+中。( 2)用 C+編寫的程序可讀性好,代碼結(jié)構(gòu)更合理,可直接地在程序中映射問題空間的結(jié)構(gòu)。( 3)生成代碼的質(zhì)量高。(
12、 4)軟件的可重用性、可擴充性、可維護性和可靠性有了明顯的提高,從而節(jié)省了開發(fā)費用和時間。5/89( 5)支持面向?qū)ο蟮臋C制,可方便地構(gòu)造出模擬現(xiàn)實問題的實體和操作。2_2 下面是一個 C 程序,改寫它,使它采用C+風格的 i/o 語句改寫如下:#include <iostream.h>main() int a,b,d,min 。cout<< ” enter two numbers:?!癱in>>a。cin>>b。min=a>b?b:a。for(d=2。 d<min。d+)if(a%b)=0)&&(b%d)=0) br
13、eak 。if(d=min) cout<< ” no common denominators”。return 0。cout<< ” the lowest common denominator is“。<<endl<<dreturn 0。2_3 測試下面的注釋是否有效?此注釋有效,單行注釋中可以嵌套/*.*/方式的注釋。2_4 以下簡單的 C+程序不可能編譯通過,為什么?原因是:在程序中,當一個函數(shù)的定義在后,而對它的調(diào)用在前時,必須將該函數(shù)的原型寫在調(diào)用語句之前,而在本程序中缺少函數(shù)原型語句。在語句:#include <iostream.h
14、>后加上語句 sum(int a,int b)。就可以通過了。6/892_5 (1)答:這兩個函數(shù)原形是等價的,因為函數(shù)原型中的參數(shù)名可以缺省。( 2)答:這兩個函數(shù)的第一行是不等價的,函數(shù)的第一行中必須包含參數(shù)名。( 3)答:這兩個函數(shù)原型是等價的,因為在函數(shù)原型中未注明參數(shù), C+認為該函數(shù)的參數(shù)表為空( void )2_6 答:輸出結(jié)果為: 10 20 因為 f 函數(shù)的參數(shù)是引用,所以修改k 的值有效。函數(shù)調(diào)用后,主函數(shù)中k 的值變?yōu)?10。由于 m 是對函數(shù)的引用,當m 被賦值為 20 時, k 的值也變?yōu)?20。2_7 舉例說明可以使用const替代 #define 以消除 #
15、define 的不安全性答:例如: #include <iostream.h>#define A 2+4#define B A*3void main() cout<<B<<endl 。 上面程序的運行結(jié)果是14 而不是 18,但很容易被認為是18。用 const 替代 #define 就能得到正確結(jié)果,從而消除了#define 的不安全性。#include <iostream.h>const A=2+4。const B=A*3 。void main() cout<<B<<endl 。 運行結(jié)果為 18。2_8 答:使用內(nèi)聯(lián)
16、函數(shù)的優(yōu)點主要有兩個:一是能加快代碼的執(zhí)行,減少調(diào)用開銷;二是能消除宏定義的不安全性。7/892_9 用動態(tài)分配空間的方法計算Fibonacci 數(shù)列的前 20 項并存儲到動態(tài)分配的空間中。答: #include <iostream.h>#include“ stdio.h”void main() int I,*p=new int20 。 /動態(tài)分配 20 個整型空間*p=1。*(p+1)=1 。 /前面兩個空間賦值1cout<<*p<< ”t” <<*(p+1)<< t ”。p=p+2。/p 指向第三個空間for(i=3 。i<
17、=20 。 i+) *p=*(p-1)+*(p-2) 。cout<<*p<< ”t ”。if(i%5=0) cout<<endl 。p+。 /指向下一個空間結(jié)果: 112358132134558914423337761098715972584418167652_10 建立一個被稱為 sroot()的函數(shù),返回其參數(shù)的二次方根。重載sroot()三次,讓它返回整數(shù)、長整數(shù)與雙精度數(shù)的二次方根(計算二次方根時,可以使用標準8/89庫函數(shù) sqrt())#include <iostream.h>#include <math.h>int sr
18、oot(int ) 。 long sroot(long)。double sroot(double)。double sqrt()。/聲明開方函數(shù) sqrt()void main() int i,x 。 long l,y 。double d,z。cin>>i 。 cin>>l 。 cin>>d。x=sroot(i)。 y=sroot(l)。 z=sroot(d)。cout<<x<<"t"<<y<<"t"<<z<<endl 。int sroot(int
19、i) return sqrt(i) 。 /i 是整數(shù)long sroot(long l) return sqrt(l) 。 /l 是長整型double sroot(double d) return sqrt(d)。 /d 是雙精度/敲進 9 16 25/輸出3 4 5習題 2_11 編寫 C+風格的程序,解決百錢問題,將一元人民幣兌換成1、2、5 分的硬幣,有多少種換法?#include <iostream.h>void main() int i,j,sum=0 。for(i=0 。i<=20。 i+)9/89for(j=0 。j<=50。j+)if(100-5*i-2
20、*j>=0)sum+。cout<<100-5*i-2*j<< ”t ” <<j<<t” <<i<<endl。cout<<” sum is“ <<sum<<endl。習題 2_12 編寫 C+風格的程序,用二分法求解f(x)=0的根#include <iostream.h>#include <math.h>inline float f(float x) return 2*x*x*x-4*x*x+3*x-6。void main() float left,righ
21、t,middle,ym,yl,yr。cout<< ” pleass two number:”。<<endl/接受輸入,確定第一組數(shù)據(jù)區(qū)域cin>>left>>right 。yl=f(left) 。yr=f(right) 。do middle=(right+left)/2 。ym=f(middle) 。if(yr*ym>0) right=middle 。Yr=ym 。10/89else left=middle 。yl=ym 。while(fabs(ym)>=1e-6) 。cout<< ”nRoot is:” <<
22、middle<<endl。本例使用了內(nèi)聯(lián)函數(shù)f(x), 因為在主函數(shù)中多次調(diào)用它,這樣可以加快代碼執(zhí)行的速度。敲進兩個數(shù): -10 10 結(jié)果: Root is 22_13 答:運行結(jié)果是: 2 4 6 12 10 說明:本例使用的是返回引用的值,index(3)=12。語句的執(zhí)行實際將a3賦值為 12。2_14 答:運行結(jié)果為: 101 說明:在語句 :i=i+1 。中賦值號左邊 :i 的 i 單元是全局變量,賦值號右邊的i 單元是局部變量i。所以執(zhí)行該語句的結(jié)果是將局部變量 i 的值 +1(101)賦值給全局變量i2_15 答:結(jié)果是: 1010 說明:函數(shù) f(&a,
23、b) 中的第一個參數(shù)是引用,引用參數(shù)是一種按地址傳遞參數(shù)的方法,對其的調(diào)用是傳地址調(diào)用;而第二個參數(shù)是變量參數(shù),對它的調(diào)用是通常的傳值調(diào)用。所以運行后,a 的值被改為 10,b 的值不變,仍為 102_16 答: D說明: int *p=new int(10) 。表示分配 1 個整型空間,初值為10int *p=new int10 。表示分配 10 個整型空間int *p=new int 。表示分配 1 個整型空間11/89int *p=new int10(0) 想給一個數(shù)組分配內(nèi)存空間時,對整個數(shù)組進行初始化,這是不允許的。2_17 答: D 說明: name被定義為指向常量的常指針,所以它
24、所指的內(nèi)容和本身的內(nèi)容都不能修改,而name3=a。修改了 name所指的常量, name=lin。和 name=new char5。修改了常指針,只有D 輸出一個字符是正確的。2_18 答: A 說明: name被定義指向常量的指針,這是一個不能移動的固定指針,它所指的內(nèi)容不能改變,但指針所指的數(shù)據(jù)可以改變,而name3=q。修改了 name所指的內(nèi)容,是正確的。name=”lin ?!?name=new char5。 name=new char( 。q)以不同的方法修改了常指針,都是錯誤的。2_19 答: A 說明: name被定義指向常量的指針,不允許改變指針所指的常量,但指針本身的內(nèi)容
25、可以修改,而name3=q。修改了 name所指的內(nèi)容,是錯誤的。 name=”lin ”name=new char5。和 name=new char(q以)不同的方法修改了常指針,都是正確的。2_20 答: D 說明: C+中不能建立引用數(shù)組和指向引用的指針,也不能建立引用的引用。所以A 、B、 C 是錯誤的, D 是正確的。第三章:類和對象(一)3_1 答:類聲明的一般格式如下:class 類名 public:公有數(shù)據(jù)成員;公有成員函數(shù);protected:保護數(shù)據(jù)成員;12/89保護成員函數(shù);private:私有數(shù)據(jù)成員;私有成員函數(shù); ;其中: class是聲明類的關鍵字;類名是要聲明
26、的類的名字;后面的花括號表示出類聲明的范圍;最后的分號表示類聲明結(jié)束。3_2 答:構(gòu)造函數(shù)是一種特殊的成員函數(shù),它主要用于為對象分配空間,進行初始化。構(gòu)造函數(shù)具有一些特殊的性質(zhì):( 1)構(gòu)造函數(shù)的名字必須與類名相同( 2)構(gòu)造函數(shù)可以有任意類型的參數(shù),但不能指定返回類型。它有隱含的返回值,該值在系統(tǒng)內(nèi)部使用。( 3)構(gòu)造函數(shù)是特殊的成員函數(shù),函數(shù)體可寫在類體內(nèi),也可寫在類體外。( 4)構(gòu)造函數(shù)可以重載,即一個類中可以定義多個參數(shù)個數(shù)或參數(shù)類型不同的構(gòu)造函數(shù)。( 5)構(gòu)造函數(shù)被聲明為公有函數(shù),但它不能象其它成員函數(shù)那樣被顯示地調(diào)用,它是在定義對象的同時被調(diào)用的。析構(gòu)函數(shù)也是一種特殊的成員函數(shù)。它
27、執(zhí)行與構(gòu)造函數(shù)相反的操作,通常用于撤消對象時的一些清理任務,如釋放分配給對象的內(nèi)存空間等。析構(gòu)函數(shù)有以下一些特點:( 1)析構(gòu)函數(shù)與構(gòu)造函數(shù)名字相同,但它前面必須加一個波浪號()( 2)析構(gòu)函數(shù)沒有參數(shù),不能指定返回類型,而且不能重載。因此在一個類中只能有一個析構(gòu)函數(shù)。( 3)當撤消對象時,編譯系統(tǒng)會自動地調(diào)用析構(gòu)函數(shù)。3_3 答: B說明: C+中對構(gòu)造函數(shù)有一些規(guī)定:不能帶返回值;可以不帶參數(shù);也可以缺省定義;但構(gòu)造函數(shù)的名字與類名必須完全相同。13/893_4 答: C說明: C+中沒有限定 private、 public、protected的書寫次序。但是,不能在類的聲明中給數(shù)據(jù)成員賦
28、初值,數(shù)據(jù)成員的數(shù)據(jù)類型也不能是 register(寄存器類型),沒有用private、public 、protected定義的數(shù)據(jù)成員是私有成員。3_5 答: C 說明: C+中對析構(gòu)函數(shù)也有一些規(guī)定:沒有參數(shù);不能重載;析構(gòu)函數(shù)的名字是在類名前加 “;”析構(gòu)函數(shù)不能指定返回類型。 3_6 答: B 說明:構(gòu)造函數(shù)的工作是在創(chuàng)建對象時執(zhí)行的。3_7 答:語句 ” p1.age=30。 ”出現(xiàn)錯誤。因為age是私有數(shù)據(jù)成員,不能直接訪問。3_8 答:第 1 個錯誤: printStu、setSno兩個成員函數(shù)沒有用public 定義,則不允許外部函數(shù)對對象進行操作。第 2 個錯誤:成員函數(shù)在類
29、外定義,應加上類名“Student:。”第 3 個錯誤: setAge應在類中說明,并且在類外定義時,應加上類名 ”Studen t: ?!?_9 答:語句 ” Point cpoint。 ”是錯誤的,它試圖用私有的構(gòu)造函數(shù)Point 訪問公有數(shù)據(jù)成員 x 和 y,這是不對的。3_10 答:語句 Stack stt?!睉搸?shù),因為當類中沒有定義構(gòu)造函數(shù)時,編譯器會自動生成一個缺省的不帶參數(shù)的構(gòu)造函數(shù)。但是,如果類中有自己定義的構(gòu)造函數(shù)后,編譯器將不再自動生成一個缺省的構(gòu)造函數(shù)。例如:將上述語句改成 “Stack stt(10)。 ”就正確了。3_11: 下面是一個計數(shù)器的定義,請完成該類成
30、員函數(shù)的實現(xiàn)#include <iostream.h>class counter public:counter(int number)。 /構(gòu)造函數(shù)14/89void increment()。 /給原值加 1void decrement()。 /給原值減 1int getvalue()。/取得計數(shù)器值int print() 。/顯示計數(shù)private:int value。 。counter:counter(int number)/構(gòu)造函數(shù)定義 value=number。 void counter:increment()/給原值加 1 value+ 。 void counter:de
31、crement()/給原值減 1 value- 。 int counter:getvalue()/取得計數(shù)器值 return value。 int counter:print()/ 顯示計數(shù) cout<<"value is "<<value<<endl 。 return 0。main() int i 。cin>>i 。counter a(0)。for(int j=0 。j<i 。j+) a.increment()。15/89a.getvalue()。a.print()。counter b(10)。for(int k=1
32、。k<i 。k+) b.decrement()。b.getvalue()。b.print()。return 0。習題: 3_12 根據(jù)注釋語句的提示,實現(xiàn)類Date 的成員函數(shù)#include <iostream.h>class Date public:void printDate()。 /顯示日期void setDay(int d)。 /設置日期值void setMonth(int m)。/ 設置月的值void setYear(int y)。/ 設置年的值private:int day,month,year。 。void main() Date testDay。testDa
33、y.setDay(5)。16/89testDay.setMonth(10)。testDay.setYear(2003)。testDay.printDate()。void Date:printDate() cout<<"nDate is "<<year<<"." 。cout<<month<<"."<<day<<endl。void Date:setDay(int d) day=d。 void Date:setMonth(int m) month=m 。 v
34、oid Date:setYear(int y) year=y。 習題: 3_13 下面定義了一個類date,根據(jù)主程序的提示,實現(xiàn)重載構(gòu)造函數(shù)date()#include <iostream.h>#include <stdio.h>class date public:date(int d,int m,int y)。date:date()。void show()。private:int day,month,year。17/89 。void date:show() cout<<day<<'/'<<month<<
35、'/' 。cout<<year<<"n"。main() date idate(28,10,1949)。 /構(gòu)造函數(shù)的參數(shù)為3 個整數(shù)idate.show()。date indate。 /構(gòu)造函數(shù)沒有參數(shù),數(shù)據(jù)通過鍵盤直接輸入indate.show()。return 0。/解:重載構(gòu)造函數(shù)的實現(xiàn)如下:date:date(int d,int m,int y) day=d。month=m。year=y。date:date() cout<<"Enter month_day_year:n"。cin>>
36、day。cin>>month。cin>>year。/ 注意:敲數(shù)據(jù)時要如: 8 回車 9 回車 2005 回車18/89習題: 3_14 建立類 cylinder, cylinder 的構(gòu)造函數(shù)被傳遞了兩個 double 值,分別表示圓柱體的半徑和高度。用類 cylinder 計算圓柱體的體積,并存儲在一個 d ouble 變量中。在類 cylinder 中包含一個成員函數(shù) vol() ,用來顯示每個 cylinder對象的體積。#include <iostream.h>class cylinder public:cylinder(double a,doub
37、le 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() cout<<"volume is: "<<volume<<"n" 。 void main()cylinder x(2.2,8.09)。 x.vol() 。19/89習題: 3_15 建立一個 Stock 類,含有股票代碼和股票現(xiàn)價兩個數(shù)據(jù)成
38、員。用 ne w 自動為 Stock 類的對象分配內(nèi)存,并將股票代碼 “ 600001,”現(xiàn)價 8.89 存入內(nèi)存的相應域中。#include <iostream.h>#include <string.h>class Stock public:void set(char *c,float pr)。void print() 。private:char Stockcode7。float price。 。void Stock:set(char *c,float pr) strcpy(Stockcode,c)。price=pr。void Stock:print() cout&l
39、t;<Stockcode<<": "<<price 。cout<<"n" 。main() Stock *p 。p=new Stock。/為對象分配空間if(!p)/ 判斷分配是否成功20/89 cout<<"Allocation error." 。return 1。p->set("600001",8.89)。/為對象賦值p->print()。/顯示對象delete p。return 0。習題: 3_16 聲明一個棧類,利用棧操作實現(xiàn)將輸入字符串反向輸
40、出的功能#include <iostream.h>/#include <iomanip.h>/#include <ctype.h>#include <string.h>const int SIZE=10。class stack public:stack()/構(gòu)造函數(shù) tos=0。 void push(char ch)。/將數(shù)據(jù) ch 壓入棧char pop()。/將棧頂數(shù)據(jù)彈出棧char stckSIZE。/數(shù)組,用于存放棧中數(shù)據(jù)SIZE 上面賦值為 10int tos。/棧頂位置(數(shù)組下標) 。/stack:stack()/構(gòu)造函數(shù),初始化棧/
41、 tos=0。 21/89void stack:push(char ch)/壓入棧if(tos=SIZE)cout<<"Stack is full"。/ 棧是滿的return。stcktos=ch。tos+。char stack:pop()/彈出棧if(tos=0) cout<<"Stack is empty"。/棧是空的 return 0。tos-。return stcktos。void main() int i 。char str20。char re_str20。cout<<"nplease input
42、a string: "。cin>>str。22/89stack ss。for(i=0 。i<strlen(str)。 i+)ss.push(stri)。for(i=0 。i<strlen(str)。 i+)re_stri=ss.pop()。re_stri='0'。cout<<"nreverse string: "。cout<<re_str<<endl。附:用 C 寫反序輸出程序步驟:打開 VC 系統(tǒng), File ànewàFile C+Sourceà File
43、 à改變路徑 Location 為本章的路徑 àFile 處寫文件名 àokà開始寫 C 程序 à之后編譯運行#include <stdio.h>#include <string.h>/#include <ctype.h>main() int inverse(char str) 。 /函數(shù)原型說明char str100。printf("Input string: ") 。scanf("%s",str)。inverse(str)。printf("Inverse
44、string: %sn",str)。int inverse(char str)/函數(shù)定義 char t。23/89int i,j 。for(i=0,j=strlen(str) 。i<strlen(str)/2。i+,j-) t=stri 。stri=strj-1 。strj-1=t 。return 0。 第四章:類和對象(二)4_1 什么是對象數(shù)組所謂對象數(shù)組是指每一數(shù)組元素都是對象的數(shù)組,也就是說,若一個類有若干個對象,我們把這一系列的對象用一個數(shù)組來存放。對象數(shù)組的元素是對象,不僅具有數(shù)據(jù)成員,而且還有函數(shù)成員。4_2 什么是 this 指針?它的主要作用是什么?C+為成員
45、函數(shù)提供了一個名字為this 的指針,這個指針稱為自引用指針。每當創(chuàng)建一個對象時,系統(tǒng)就把this 指針初始化為指向該對象。每當調(diào)用一個成員函數(shù)時,系統(tǒng)就自動把this 指針作為一個隱含的參數(shù)傳給該函數(shù)。不同的對象調(diào)用同一個成員函數(shù)時,C+編譯器將根據(jù)成員函數(shù)的this 指針所指向的對象來確定應該引用哪一個對象的數(shù)據(jù)成員。4_3 友元函數(shù)有什么作用?友元函數(shù)不是當前類的成員函數(shù),而是獨立于當前類的外部函數(shù),但它可以訪問該類的所有對象的成員,包括私有成員和公有成員。通過友元函數(shù)可以在不放棄私有數(shù)據(jù)安全的情況下,使得類外部的函數(shù)能夠訪問類中的私有成員。24/89當一個函數(shù)需要訪問多個類時,友元函數(shù)
46、非常有用,普通的成員函數(shù)只能訪問其所屬的類,但是多個類的友元函數(shù)能夠訪問相應的所有類的數(shù)據(jù)。此外,在某些情況,例如運算符被重載時,需要用到友元函數(shù)。4_4 假設在程序中已經(jīng)聲明了類point,并建立了其對象p1 和 p2。請回答以下幾個語句有什么區(qū)別?(1)point p1,p2。用帶缺省參數(shù)的構(gòu)造函數(shù)或不帶參數(shù)的構(gòu)造函數(shù),定義了point類的 2 個對象 p1 和 p2。(2)point p2=p1。依據(jù)已存在的對象p1,用賦值形式調(diào)用拷貝構(gòu)造函數(shù),創(chuàng)建對象 p2。(3)point p2(p1)。依據(jù)已存在的對象p1,用顯示調(diào)用拷貝構(gòu)造函數(shù),創(chuàng)建對象p2(4)p2=p1。對象賦值語句,將對象
47、p1 數(shù)據(jù)成員的值拷貝到對象p2 中。4_5 在下面有關靜態(tài)成員函數(shù)的描述中,正確的是(B)見書 133 頁說明: C+中規(guī)定在建立對象前,就可以為靜態(tài)數(shù)據(jù)成員賦值。同時規(guī)定在靜態(tài)成員函數(shù)中不能使用 this 指針。靜態(tài)成員函數(shù)在類外定義時,不需要用 static 前綴。靜態(tài)成員函數(shù)即可以在類內(nèi)定義也可以在類外定義4_6 在下面有關友元函數(shù)的描述中,正確的說法是(A )( 134)說明:在 C+中友元函數(shù)是獨立于當前類的外部函數(shù),一個友元函數(shù)可以同時定義為兩個類的友元函數(shù)。友元函數(shù)即可以在類的內(nèi)部也可以在類的外部定義,而在外部定義友元函數(shù)時,不必加關鍵字 friend 4_7 友元函數(shù)的作用之一是( A )( 134)25/89說明:由于友元函數(shù)可以直接訪問對象的私有成員,所以友元的作用是提高程序運行的效率。4_8 指出下面程序的錯誤,并說明原因:答案是將其中對應的2 條改成:cout<<Student:get_x()<<” Studet
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2023凈身出戶離婚協(xié)議書
- 償還借款協(xié)議書范本
- 額部腫塊病因介紹
- 公司轉(zhuǎn)讓個人股份協(xié)議
- 中考政治第一部分知識闖關能力提升第二課時調(diào)節(jié)情緒學習壓力明辨是非復習課獲
- 2015中國在線音樂行業(yè)研究報告
- (2024)赤泥綜合利用生產(chǎn)建設項目可行性研究報告(一)
- 2023年辦公照明項目籌資方案
- 【電信終端產(chǎn)業(yè)協(xié)會】2024年終端智能化分級研究報告
- 國際物流題庫(含參考答案)
- 臨時用電配電箱日常檢查表
- 錄井技術(shù)服務方案與技術(shù)措施
- 2022年二年級上冊語文復習計劃
- 小學語文人教課標版(部編)三年級下冊習作:我的植物朋友 1
- 西師大版六年級數(shù)學上冊《比和按比例分配的整理與復習》課件
- 房屋租賃合同終止協(xié)議書格式(3篇)
- PPT成功的秘訣——勤奮
- 建設工程監(jiān)理概論(PPT)
- 土地整治業(yè)務培訓
- 澳大利亞教育質(zhì)量保障框架ppt課件
- 熱力學第四章熱力學第二定律(me)(1)
評論
0/150
提交評論