VisualC實(shí)用教程第4版 鄭阿奇 習(xí)題參考答案_第1頁
VisualC實(shí)用教程第4版 鄭阿奇 習(xí)題參考答案_第2頁
VisualC實(shí)用教程第4版 鄭阿奇 習(xí)題參考答案_第3頁
VisualC實(shí)用教程第4版 鄭阿奇 習(xí)題參考答案_第4頁
VisualC實(shí)用教程第4版 鄭阿奇 習(xí)題參考答案_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、1.7指針和引用已知int d=5, *pd=&d, b=3;求下列表達(dá)式的值。*p d*b B. +* pd-bC. *p d+D.int a5=2,4,6,8,10;int *p=a, *q=&p; cout*( p+), *q;(7)下列表示引用的方法中,()已知:int m=10;A. int &x=m; B. i nt &y= 10; C.i nt &z; D. float &t = &m;A.答:B4,4 B. 2,2 C. 4,2 D. 4,5(4)下述程序片段的輸出是()。inta34=1,2,3,4,5,6,7,8;in

2、t x, * p=a0; x=(* p)*(* p+2)*(* p+4); coutxendl;A.15 B.14 C答:A16 D13若有以下定義,則下列對(duì)數(shù)組引用正確的是(in t (*q)3 = new in t23;A. q23 B. *q C. *(*q+2) D.*(*(q+2)+3)答:C(6)若要用如下程序片段使指針變量float*p;p=(float * ) new float;則空白處應(yīng)填入:A.float * B*float Cp指向一個(gè)存儲(chǔ)動(dòng)態(tài)分配的存儲(chǔ)單元:省略;D.( float )55.A.+(* pd)答:15, 3,5, 656.選擇填充。(1)選擇正確的說明

3、語句為()。A. i nt Nb;C. i nt N;答:B(2)若有定義:A.變量C.變量 答:C.(3)下述程序的輸出結(jié)果是#in elude void mai n() B. i nt N4,9; D. int *N10;int a=100,*p=&a;則*p的值是(.變量a的地址值無意義p的地址B a的值D.是正確的。答:A57.分析下列程序的結(jié)果。#in clude int &fun( intn, i nt s) int &m=s n;return m;void mai n()int s =15,4,3,2,1,0; fun(3, s)=10;coutvvfu

4、n( 3,s)e ndl;答:1058.用指針作為函數(shù)的參數(shù),設(shè)計(jì)一個(gè)實(shí)現(xiàn)兩個(gè)參數(shù)交換的函數(shù)。 序后輸出。輸入3個(gè)實(shí)數(shù),按升序排59.編寫函數(shù)void fun(int *a所指的一維數(shù)組中,其中指針 置的下標(biāo)。,int *n,int pos,int x);其功能是將x值插入到指針a n所指存儲(chǔ)單元中存放的是數(shù)組元素個(gè)數(shù),pos為指定插入位60.編寫函數(shù)void fun(char *s)61輸入一個(gè)字符串,串內(nèi)有數(shù)字和非數(shù)字字符,將其中連續(xù)的數(shù)字作為一個(gè)整數(shù),345放入b1、678放入b2、主函數(shù)中完成輸入和輸出工作。,其功能是將s所指的字符串逆序存放。例如,abc2345 345fdf678j

5、dhfg945。依次存放到另一個(gè)整型數(shù)組b中。如將2345存放到bO、 統(tǒng)計(jì)出字符串中的整數(shù)個(gè)數(shù),并輸出這些整數(shù)。要求在設(shè)計(jì)一個(gè)函數(shù),把指向字符串的指針和指向整數(shù)的指針作為函數(shù)的參數(shù),并完成從字符串中依次提取出整數(shù)的工作。62.有5個(gè)學(xué)生,每個(gè)學(xué)生的數(shù)據(jù)結(jié)構(gòu)包括學(xué)號(hào)、姓名、年齡、C+成績(jī)、數(shù)學(xué)成績(jī)和英語成績(jī)、總平均分,從鍵盤輸入5個(gè)學(xué)生的學(xué)號(hào)、姓名、3門課的成績(jī),計(jì)算3門課的總平均 分,最后將5個(gè)學(xué)生的數(shù)據(jù)輸出。要求各個(gè)功能用函數(shù)來實(shí)現(xiàn)。第2章C+面向?qū)ο蟪绦蛟O(shè)計(jì)2.1類和對(duì)象1.什么是類?類的定義格式?類的成員一般分為哪兩部分?它們的區(qū)別如何?“類”是對(duì)具有共同的屬性特征和行為特征的對(duì)象的概

6、括和抽象。類的定義格式:class類名P rivate:私有數(shù)據(jù)成員和成員函數(shù)public公有數(shù)據(jù)成員和成員函數(shù);類的成員一般分為數(shù)據(jù)成員和成員函數(shù)兩部分。數(shù)據(jù)成員一般用來表示對(duì)象屬性特征,而成員函數(shù)一般表示了對(duì)象的可以進(jìn)行的操作,行為特征。2.類與結(jié)構(gòu)體有什么區(qū)別類中可以包含兩類成員一一數(shù)據(jù)成員和成員函數(shù);而標(biāo)準(zhǔn)C語言中的結(jié)構(gòu)體只能包含數(shù)據(jù)成員;但是C+中的結(jié)構(gòu)體對(duì)C語言中的結(jié)構(gòu)體有擴(kuò)展,C+中的結(jié)構(gòu)體也可以兩類成員一一數(shù)據(jù)成員和成員函數(shù);因此C+中的類和C+中的結(jié)構(gòu)體出來在定義方式上不一樣之外(class,struct ),還有就是它們的缺省封裝字是不一樣的,一個(gè)是private,一個(gè)是p

7、ublic。3.什么是對(duì)象?如何定義一個(gè)對(duì)象?對(duì)象的成員如何表示?對(duì)象是類的實(shí)例,對(duì)象的定義: 或:對(duì)象成員的表示:或:4.什么是構(gòu)造函數(shù)?構(gòu)造函數(shù)有哪些特點(diǎn)?構(gòu)造函數(shù)是類的成員函數(shù),它有以下特點(diǎn):構(gòu)造函數(shù)的名字必須與類名相同。構(gòu)造函數(shù)可以有任意的形參,但不能具有返回值。 定義對(duì)象時(shí),編譯系統(tǒng)會(huì)自動(dòng)地調(diào)用構(gòu)造函數(shù)。 構(gòu)造函數(shù)可以重載5.什么是析構(gòu)函數(shù)?析構(gòu)函數(shù)有哪些特點(diǎn)?析構(gòu)函數(shù)也是類的成員函數(shù),它有以下特點(diǎn): 析構(gòu)函數(shù)名也應(yīng)與類名相同,只是在函數(shù)名前面加一個(gè)波浪符。 析構(gòu)函數(shù)不能帶任何參數(shù),也沒有返回值。 每個(gè)類有而且只能有一個(gè)析構(gòu)函數(shù)。析構(gòu)函數(shù)不能重載。6什么是默認(rèn)構(gòu)造函數(shù)和默認(rèn)析構(gòu)函數(shù)?

8、假如用戶沒有自己編寫構(gòu)造函數(shù)或析構(gòu)函數(shù),編譯系統(tǒng)也會(huì)自動(dòng)生成一個(gè)構(gòu)造函數(shù)和析構(gòu)函數(shù),這就是默認(rèn)的構(gòu)造函數(shù)和析構(gòu)函數(shù),但是這兩個(gè)函數(shù)沒有任何參數(shù),也不進(jìn)行任何操作。7什么是復(fù)制構(gòu)造函數(shù)?它的功能和特點(diǎn)是什么?復(fù)制構(gòu)造函數(shù)是一種特殊的構(gòu)造函數(shù), 復(fù)制構(gòu)造函數(shù)的名稱也和類名是一樣的, 的對(duì)象,因此它的形式參數(shù)都是這種形式:&什么是靜態(tài)成員?靜態(tài)成員的作用是什么9.如何對(duì)對(duì)象進(jìn)行初始化?對(duì)象的初始化都是通過構(gòu)造函數(shù)進(jìn)行的,10什么是友元?它的作用有哪些?什么是友元函數(shù)和友元類?11什么是this指針?它有何作用?一個(gè)類可以同時(shí)有很多對(duì)象存在,許多不同的對(duì)象可以調(diào)用相同的成員函數(shù),編譯系統(tǒng)為了知

9、道當(dāng)前是那個(gè)對(duì)象在調(diào)用成員函數(shù),因此定義了this指針,this指針其實(shí)就是指向當(dāng)前對(duì)象的指針。12.什么是類的作用域?對(duì)象的生存期有何不同?類的作用域簡(jiǎn)稱類域, 它是指在類的定義中由一對(duì)花括號(hào)所括起來的部分,每一個(gè)類都具有相應(yīng)的類域。 類域中定義的變量不能使用auto,register和extern等修飾符,只能用static修飾符,函數(shù)也不能用extern修飾符。是類的變量。類名對(duì)象名稱;類名*對(duì)象指針;對(duì)象名稱.成員名字;對(duì)象指針7成員名字;它用來在已存在的對(duì)象基礎(chǔ)上建立一個(gè)新對(duì)象。 但是它的形式參數(shù),都是指向一個(gè)已經(jīng)存在“con st類名&ob”,即是一個(gè)對(duì)象的引用。只要在聲明

10、對(duì)象時(shí), 逐個(gè)添好構(gòu)造函數(shù)的實(shí)參。所謂對(duì)象的生存期是指對(duì)象從被創(chuàng)建開始到被釋放為止的時(shí)間, 分為如下三種:1、 局部對(duì)象:當(dāng)對(duì)象被定義時(shí)調(diào)用構(gòu)造函數(shù),該對(duì)象被創(chuàng)建,當(dāng)程序退出定義該對(duì)象 所在的函數(shù)體或程序塊時(shí),調(diào)用析構(gòu)函數(shù),釋放該對(duì)象。2、 靜態(tài)對(duì)象:當(dāng)程序第一次執(zhí)行所定義的靜態(tài)對(duì)象時(shí),該對(duì)象被創(chuàng)建, 該對(duì)象被釋放。3、 全局對(duì)象:當(dāng)程序開始時(shí),調(diào)用構(gòu)造函數(shù)創(chuàng)建該對(duì)象,當(dāng)程序結(jié)束時(shí)調(diào)用析構(gòu)函數(shù) 釋放該對(duì)象。13.分析下列程序的運(yùn)行結(jié)果。程序1:#in clude #in clude class CCoun terp rivate:double m_value;public:void SetVa

11、lue(double v) m_value=v; double GetValue();int GetNum();double CCou nter:GetValue() return si n(10.0*m_value); int CCou nter: GetNum() return (in t)m_value; void mai n()CCoun ter sam;sam.SetValue(50.0);coutThe value is: sam.GetValue()e ndl; coutThe num is: sam.GetNum()e ndl;程序2:#in clude #in clude c

12、lass personint age;char n ame10;public:void in it(i nt i, char *str) age = i; strc py(n ame, str); void dis play() cout n ame is age years old; ;void mai n() person demo;demo.i nit(30, LiMi ng);demo.dis play();按生存期的不同對(duì)象可當(dāng)程序結(jié)束時(shí),程序3:#in clude #in clude class person int age;char *n ame;p ublic:void in

13、it(i nt i, char *str)int j;j=strle n(str)+1;n ame=new charj;strc py(n ame, str);age = i;person() delete n ame;coutdestructor is called.;void dis play() cout n ame is age years oldn; ;void mai n() person demo;demo.i nit(30, LiMi ng);demo.dis play();程序4:#in clude class CSampublic:static int m;CSam() m

14、+; CSam( int n ) m = n; static void testm() m+; ;int CSam:m =0;void mai n()CSam A;CSam B(3);A.testm();CSam:testm(); coutm = B.me ndl;14.定義一個(gè)描述學(xué)生基本情況的類,數(shù)據(jù)成員包括姓名、學(xué)號(hào)、C+、英語和數(shù)學(xué)成績(jī),成員函數(shù)包括輸出數(shù)據(jù)、置姓名和學(xué)號(hào)、置3門課的成績(jī),求出總成績(jī)和平均成績(jī)。#in clude #in clude class CStude ntinfochar stu_ name20;char stu_id10;float C_score;float

15、 E_score;float M_score;public:CStude ntl nfo(char *n ame, char *id)strc py(stu _n ame, name);strcpy(stu_id,id);C_score=E_score=M_score=0.00;void In it(float score1, float score2,float score3)C_score=score1;E_score=score2;M_score=score3;float GetTotal()return (C_score+E_score+M_score); - -float GetAv

16、g()return (C_score+E_score+M_score)/3;void Dis play()coutName:stu_ name ID:stu_ide ndl;coutC Language:C scoreM_scoree ndl;coutTotalis:GetAvg()e ndl; ;void mai n() CStude ntinfo stu(a ndrew,98041011); float score1,score2,score3;cout score1;cout score2;coutMathmetics:;Mathmetics:En glish:E_scoreis:Get

17、Total() score3;stu.ln it(score1,score2,score3); stu.Dis play();15.設(shè)有一個(gè)描述坐標(biāo)點(diǎn)的CPoint類,其私有變量x和y代表一個(gè)點(diǎn)的x、y坐標(biāo)值。編寫 程序?qū)崿F(xiàn)以下功能:利用構(gòu)造函數(shù)傳遞參數(shù),并設(shè)其默認(rèn)參數(shù)值為60和75,利用成員函數(shù)display()輸出這一默認(rèn)的值;利用公有成員函數(shù)setpoint()將坐標(biāo)值修改為(80,150),并利用成員函數(shù)輸出修改后的坐標(biāo)值。16以下是一個(gè)類的測(cè)試程序,給出類的定義,構(gòu)造一個(gè)完整的程序。執(zhí)行程序時(shí)的輸出如下。輸出結(jié)果:200-60=140主函數(shù)為:void mai n()CTest c;

18、c.in it(200, 60);c.prin t();CTest類的構(gòu)造如下:#in clude class CTestint x,y;public:void in it(i nt x0,i nt y0)x=x0;y=y0;void prin t()cout200-60=x-ye ndl; ;17.設(shè)有一個(gè)類,其定義如下:#in clude class CSa mp lechar*p1,*p2;public:void in it(char *s1, char *s2); void prin t() cout p1 = p1n p2 = p2n; void copy (CSa mple &am

19、p;on e);void free(); ;成員函數(shù)init()是將s1和s2所指向的字符串分別送到內(nèi)存空間中,函數(shù)copy將對(duì)象one中的兩個(gè)字符串復(fù)制到當(dāng)前的對(duì)象中,p1和p2所指向的動(dòng)態(tài)分配的內(nèi)存空間。設(shè)計(jì)一個(gè)完整的程序,包括完成這 和測(cè)試工作。#in clude #in clude class CSa mp lechar*p1,*p2;public:void in it(char *s1, char *s2);void prin t()cout p1 = p 1n p2 = p2 p1;delete this- p2;void mai n()CSa mp le a,b;a.i nit(

20、My name is ,a ndrew);a.prin t();b.co py(a);p1和p2所指向的動(dòng)態(tài)申請(qǐng)的free()函數(shù)釋放3個(gè)函數(shù)的定義b.prin t(); a.free();本程序的設(shè)計(jì)是有問題的,最好是把new分配內(nèi)存寫在構(gòu)造函數(shù)中!如此無法進(jìn)行b.free()!因?yàn)閷?duì)象b沒有用new分配內(nèi)存,因此不可以用delete運(yùn)算符。;構(gòu)造完整的程序,包括類成員函數(shù)的定義和測(cè)試程序的設(shè)計(jì)。構(gòu)造函數(shù)中的nIntSize和nFloatSize分別表示整型數(shù)組和浮點(diǎn)數(shù)組的大小。CArray:CArray(i nt nin tSize, i nt n FloatSize) n SizeOfI

21、 nt=nln tSize;plnt=new intn SizeOfI nt;n SizeOfFloat=nFloatSize;p Float =new float n SizeOfFloat; nNumOfIn t=0; nNum OfFloat=0;void CArray: pu t(i nt n)plntnNu mOfI nt+=n;void CArray: pu t(float x) p Float nNu mOfFloat+=x; int CArray:get In t(i nt in dex) if (in dex=0 & in dex=0 & in dex=nNu

22、m OfFloat) retur n pF loat in dex;CArray:CArray()delete pFloat;delete pint;18.設(shè)有一個(gè)類,其定義如下:#in elude class CArray int nSizeOfI nt;int nNumOfI nt; int nSizeOfFloat; int nNu mOfFloat;int *plnt; /float *p Float;public:CArray(i nt nIn tSize=100, i nt nFloatSize=200); void pu t( intn);/void put(float x);/

23、int getI nt(i nt in dex); / float getFloat(i nt in dex); /CArray();/void prin t();/整型數(shù)組的大小整型數(shù)組中實(shí)際存放的元素個(gè)數(shù)浮點(diǎn)數(shù)組的大小浮點(diǎn)數(shù)組中實(shí)際存放的元素個(gè)數(shù) 指向整型數(shù)組,動(dòng)態(tài)分配內(nèi)存空間 指向浮點(diǎn)數(shù)組,動(dòng)態(tài)分配內(nèi)存空間將n加入到整型數(shù)組中 將x加入到浮點(diǎn)數(shù)組中取整型數(shù)組中第index個(gè)元素,index從0開始 取浮點(diǎn)數(shù)組中第index個(gè)元素,index從0開始 析構(gòu)函數(shù),釋放動(dòng)態(tài)分配的內(nèi)存空間 分別輸出整型數(shù)組和浮點(diǎn)數(shù)組中的所有元素void CArray: prin t()for( int i=0;

24、i nNu mOfI nt;i+) cout pin ti;coutn;for( int j=0;j nNu mOfFloat;j+) cout p Floatj;coutn; void mai n() int a=10;float x=10.5;CArray MyArray(10,15);MyArray. put(a);MyArray. put(x);MyArray. put(a+1);MyArray. put(x+1);MyArray. put(a+2);MyArray. pu t(x+2);MyArray. prin t();19.在一個(gè)程序中,實(shí)現(xiàn)如下要求:(1)構(gòu)造函數(shù)重載;(2)成

25、員函數(shù)設(shè)置默認(rèn)參數(shù);(5)使用不同的構(gòu)造函數(shù)創(chuàng)建不同的對(duì)象。#in clude#in cludeclass studp rivate:int num;char n ame10;char sex;public:stud() num=10010;strc py(n ame,Wa ng Li);sex=F;stud(i nt n ,char n am ,char s ) num=n;strc py(n ame, n am);sex=s;void dis play() cout nu m: num e ndl; cout n ame: n amee ndl; coutsex:sexe ndl; ;vo

26、id mai n() stud stud1;stud1.dis play();stud stud2(10011,Zha ng fun,m); stud2.dis play();2.2繼承和派生類20.派生類是如何定義的?它有哪些特點(diǎn)?定義派生類的一般形式為:派生類名:引用權(quán)限基類名 派生類新增的數(shù)據(jù)成員派生類新增的成員函數(shù);派生類繼承了基類的所有數(shù)據(jù)成員和成員函數(shù),并增加新的成員。21.派生類的繼承方式有哪些?它們各有哪些特點(diǎn)?這是繼承技術(shù)中比較關(guān)鍵的問題。從基類繼承來的成員的引用,不是簡(jiǎn)單地把基類的私有成員和公用成員直接作為派生類的私有成員和公用成員來使用,而要根據(jù)基類成員的“封裝權(quán)限”和派

27、生類聲明的“引用權(quán)限”共同決定。1當(dāng)引用權(quán)限為public時(shí),稱為“公用派生類”。在公用派生類中,基類的public成員和protected成員仍然成為派生類中的public成員和protected成員;然而基類中的私有成員卻成為了派生類中的“不可訪問的成員”,不能被派生類使用。2當(dāng)引用權(quán)限為private時(shí),稱為“私有派生類”。在私有派生類中,基類的公用成員和保護(hù)成員成為了派生類中的私有成員,基類的私有成員成為派生類“不可訪問的成員”。3從以上兩點(diǎn)可以看出,基類中的私有成員在派生類中都成為了 “不可訪問的成員”。因此在繼承中經(jīng)常使用另外一種封裝字protected,被protected封裝的

28、成員稱為“保護(hù)成員”, 保護(hù)成員和私有成員相似,不能被外界引用,但它卻可以被派生類的成員函數(shù)引用。22.在定義派生類的過程中,如何對(duì)基類的數(shù)據(jù)成員進(jìn)行初始化?基類的數(shù)據(jù)成員初始化往往是通過基類的構(gòu)造函數(shù)進(jìn)行的,但是在么在建立派生類的對(duì)象 時(shí),是不會(huì)自動(dòng)執(zhí)行基類的構(gòu)造函數(shù),因而就會(huì)使基類中成員變量未初始化。所以在設(shè)計(jì)派生類的構(gòu)造函數(shù)時(shí),不僅要考慮派生類所增加的成員變量初始化,還應(yīng)當(dāng)考慮基類的成員變量初始化。在執(zhí)行派生類的構(gòu)造函數(shù)時(shí),應(yīng)當(dāng)調(diào)用基類的構(gòu)造函數(shù)。因此考慮到基類成員變量初始化后,派生類的構(gòu)造函數(shù)一般形式為:派生類構(gòu)造函數(shù)名(參數(shù)表):基類構(gòu)造函數(shù)名(參數(shù)表)例如:classstude n

29、t(i nt n, char n am,char s,i nt a,char ad ):stud( n,n am,s)其中,student類是stud的派生類。23.在派生類中能否直接訪問基類中的私有成員?在派生類中如何實(shí)現(xiàn)訪問基類中的私有成員?在派生類中是不能直接訪問基類中的私有成員的,員,只能通過基類所提供的Public或protected要在派生類中訪問基類中的私有成 封裝的成員函數(shù)進(jìn)行。24.什么是虛基類?它的作用如何?在聲明派生類時(shí),在基類的引用權(quán)限前面加上class派生類名:virtual 引用權(quán)限基類名virtual,就將基類聲明成了虛基類,即:虛基類的引入主要是針對(duì)多重派生的,

30、 是為了消除派生類的二義性使用的。 通過虛基類 派生出來的新類,同一個(gè)成員變量在不同的派生類中都只有一個(gè)復(fù)制, 當(dāng)通過普通基類派生 的新類,同一個(gè)成員變量,在不同的派生類中的副本是不一樣的。25.分析以下程序的結(jié)果。 程序一、#in clude class A p rivate:int a, b;public:A(int i, i nt j)a=i; b=j;void Offset。nt x, i nt y) a+=x; b+=y; void Dis play() cout(a,b)e ndl; ;class B:p rivate Ap rivate:int x, y;public:B(i n

31、t i, i nt j, i nt k, i nt l):A(i,j) x=k; y=l; void Dis play() coutx,ye ndl;void Move() Offset(3,5); void Show() A:Dis play(); ;void main()A e(1,2); e.Display();B d(3,4,5,6);d.Move();d.Dis play();d.Show();運(yùn)行結(jié)果:5,65,6程序二、#in elude class CRootpublic:int small;CRoot() small= 2; CRoot(i nt n) small = n;v

32、oid showsmall() coutsmall=smalle ndl; ;class CDer1: public CRootpublic:CDer1(i nt m):CRoot(m) ;class CDer2: public CRootp ublic:int small;CDer2(i nt n=0) small=n; ;void mai n() CRoot A;CDer1 B(3);CDer2 C;A.showsmall(); B.showsmall(); C.showsmall(); 運(yùn)行結(jié)果:26.定義一個(gè)人員類CPerson,包括數(shù)據(jù)成員:姓名、編號(hào)、性別和用于輸入/輸出的成員 函

33、數(shù)。在此基礎(chǔ)上派生出學(xué)生類CStudent(增加成績(jī))和教師類CTeacher(增加教齡),并實(shí)現(xiàn)對(duì)學(xué)生和教師信息的輸入/輸出。#in clude class CP erson /聲明基類 p rotected:II基類保護(hù)成員int ID;char n ame10;char sex;p ublic:class CStude nt: public CPersonp rivate:float score;public:CStude nt() cout score;void out pu t() CP erso n:out put();cout成績(jī):scoreendl; ;class CTeach

34、er: public CPersonp rivate:int age;public:CTeacher() cout age;void out pu t() CP erso n:out put();cout年齡:ageendl; ;CP erso n() coutcoutID;coutn ame;cout sex;coute ndl; void out pu t()coutcoutcout;請(qǐng)輸入以下資料:endl;編號(hào):;姓名:;性別:;編號(hào):IDendl;姓名:nameendl;性別:sexendl;void mai n() CPerson personi; person l.out pu

35、t(); CStude nt stu; stu.out put();CTeacher teacher; teacher.out pu t();27.把定義平面直角坐標(biāo)系上的一個(gè)點(diǎn)的類CPoint作為基類,派生出描述一條直線的類CLine,再派生出一個(gè)矩形類CRecto要求成員函數(shù)能求出兩點(diǎn)間的距離、矩形的周長(zhǎng)和面積等。設(shè)計(jì)一個(gè)測(cè)試程序,并構(gòu)造完整的程序。#in clude #in clude class CP oi nt / p rotected:int x0,y0;p ublic:CPoin t(i nt a=0,i nt b=0) x0=a; y0=b;void out pu t()cou

36、tx0=x0e ndl; couty0=y0endl;class CLi ne: public CP oi ntprivate:int x1,y1;public:CLin e(i nt x,i nt y, i nt u=0, i nt v=0):C Poi nt(x,y) x1=u;y1=v;void out pu t() CP oi nt:out put();coutx1=x1e ndl;couty1=y1e ndl;double len gth()return (double)sqrt(x1-x0)*(x1-x0)+(y1-y0)*(y1-y0);class CRect: public C

37、Pointprivate:int x1,y1;p ublic:CRect(i nt x,i nt y, i nt u=0, i nt v=0):C Poi nt(x,y) x1=u;y1=v; float len gth()聲明基類return (float)(2*(x1-x0)+(y1-y0);float area()return (float)(x1-x0)*(y1-y0); ;void mai n()CLi ne l(1,0,1,1);cout長(zhǎng)度=l.le ngth()e ndl;CRect rect(0,1,4,10);cout周長(zhǎng)=recten gth()e ndl;cout面積=

38、rect.area()e ndl;28.定義一個(gè)字符串類CStrOne,包含一個(gè)存放字符串的數(shù)據(jù)成員,能夠通過構(gòu)造函數(shù)初始 化字符串,通過成員函數(shù)顯示字符串的內(nèi)容。在此基礎(chǔ)上派生出CStrTwo類,增加一個(gè)存放字符串的數(shù)據(jù)成員;并能通過派生類的構(gòu)造函數(shù)傳遞參數(shù),初始化兩個(gè)字符串, 通過成員函數(shù)進(jìn)行兩個(gè)字符串的合并以及輸出。(字符串合并可使用標(biāo)準(zhǔn)庫函數(shù)strcat,需要包含頭文件string.h) #in clude #in clude class CStrO ne p rotected:char *p str;p ublic:CStrO ne( char str) p str=str;void

39、 show() coutstri ngs= p stre ndl;class CStrTwo: public CStrO nechar *newp str;p ublic:CStrTwo( char str1 ,char str2 ):CStrO ne(str1) newp str=str2;void show() coutstri ngs仁p stre ndl; coutstri ngs2= newp stre ndl;void joi nt() char tem p100;strc py (te mp, p str);newp str=strcat(te mp,newp str); cou

40、t newp stre ndl;void mai n()CStrTwo str(My Name is Lia n, 45 years old); str.show();str.joi nt();2.3多態(tài)和虛函數(shù)29.什么是多態(tài)性?所謂“多態(tài)性”就是不同對(duì)象收到相同的消息時(shí),產(chǎn)生了不同的動(dòng)作。 這里的消息主要是指對(duì)類的成員函數(shù)的調(diào)用,因此的函數(shù)重載就是多態(tài)性的表現(xiàn)。30.什么是虛函數(shù)?為什么要定義虛函數(shù)?在函數(shù)的聲明時(shí),在函數(shù)名前面加上vitual就實(shí)現(xiàn)了虛函數(shù)的聲明。通過虛函數(shù)和繼 承,可以實(shí)現(xiàn)運(yùn)行時(shí)的多態(tài)性。即在程序執(zhí)行前,根據(jù)函數(shù)和參數(shù)還無法確定應(yīng)該調(diào)用哪一 個(gè)函數(shù),必須在程序的執(zhí)行過程

41、中,根據(jù)執(zhí)行情況動(dòng)態(tài)地確定。31.什么是純虛函數(shù)?什么是抽象類?聲明純虛函數(shù)的一般格式為:virtual函數(shù)類型 函數(shù)名(形參表)=0;它與一般虛函數(shù)不同的是:在純虛函數(shù)的形參表后面多了個(gè)“=0”。把函數(shù)名賦于0,本質(zhì)上是將指向函數(shù)的指針的初值賦為0,純虛函數(shù)不能有具體的實(shí)現(xiàn)代碼。抽象類是指至少包含一個(gè)純虛函數(shù)的特殊的類 聲明一個(gè)抽象類的對(duì)象。必須通過繼承得到派生類后, 實(shí)現(xiàn)代碼,才能獲得一個(gè)派生類的對(duì)象。32.分析下列程序的結(jié)果。#in clude class B p ublic:B() B(i nt i) b = i;virtual void vifun() coutB:virfu n()

42、 is called.n;p rivate:int b;class D: p ublic Bp ublic:D()D(i nt i, i nt j):B(i)d=j;private:int d;void vifun() coutvirfu n();void mai n()D *pd = new D;fun(p d);D;D;: :uipfuipf unOunO isis called.called. PressPress anyanytoto continuecontinue33.定義一個(gè)抽象類CShape包含純虛函數(shù)Area()(形狀大?。?。然后派生出三角形CTriangle類、矩形積。最后

43、定義一個(gè)CArea類,計(jì)算這幾個(gè)形狀的面積之和, 函數(shù)或成員函數(shù)來設(shè)置。編寫一個(gè)完整的程序。#in elude class CSha pepublic:virtual float Area()=0;virtual void SetData(float, float)=0;。它本身不能被實(shí)例化,也就是說不能在派生類中定義了純虛函數(shù)的具體的用于計(jì)算面積)和SetData()(用于重設(shè)CRect類、圓CCircle類,分別求其面 各形狀的數(shù)據(jù)通過CArea類構(gòu)造;class CTria ngle:p ublic CSha peprivate:float l,h;p ublic:void SetDat

44、a(float width=0, float height=0) l=width; h=height; float Area() cout h*l/2n;return (h*l/2); ;class CRect:p ublic CSha pep rivate:float w,h;p ublic:void SetData(float width=0, float height=0) w=width; h=height; float Area() cout h*wn;return (h*w); ;class CCircle:p ublic CSha peprivate: float r;publi

45、c:void SetData(float radius=0,float l=0) r=radius; float Area() cout 2*3.1416*r*rTrack PopupMenu( TPM _LEFTALIGN I TPM _RIGHTBUTTON, point.x, point.y,this);7.如何使一個(gè)工具按鈕和某菜單項(xiàng)命令相結(jié)合?將工具欄上按鈕的ID設(shè)置成和菜單項(xiàng)ID一樣即可。&狀態(tài)欄的作用是什么?狀態(tài)欄的窗格分為幾類?如何添加和減少相應(yīng)的窗格?狀態(tài)欄是一條位于應(yīng)用程序的主窗口底部的水平條,可以分割成幾個(gè)窗格,用來顯示應(yīng)用程序的當(dāng)前狀態(tài)信息或提示信息。狀態(tài)欄窗格

46、分為“信息行窗格”和“指示器窗口”Alt構(gòu)成一個(gè)組合鍵,Alt構(gòu)成一個(gè)組合鍵。CMainFrame都處理其 會(huì)有什么樣的結(jié)WM_CONTEXTMEN息控制函數(shù);編輯要增加一個(gè)信息行窗格,則只需在狀態(tài)欄數(shù)組中適當(dāng)?shù)奈恢迷黾右粋€(gè) 即可;要增加指示器窗格,則在狀態(tài)欄數(shù)組的適當(dāng)位置增加一個(gè)在 資源ID。若要減少窗格,只需減少數(shù)組元素即可。9.如何在狀態(tài)欄的窗格顯示文本?可以調(diào)用CStatusBar:Set Pan eText函數(shù)更新任何窗格中的文本。10若狀態(tài)欄只有一個(gè)用戶定義的指示器窗格(其ID號(hào)為ID_TEXT_PANE)應(yīng)如何定義?若當(dāng)用戶在客戶區(qū)雙擊鼠標(biāo)時(shí),在該窗格中顯示“雙擊鼠標(biāo)”字樣,則應(yīng)

47、如何編程?答:步驟:首先建立一個(gè)SDI應(yīng)用程序,然后:用Ctrl+R進(jìn)入資源編輯器,新建一個(gè)字符串資源,其ID為ID_TEXT_PANE打開Mai nF rm.cp p文件,刪除狀態(tài)欄數(shù)組中缺省的元素,并增加一個(gè)為ID_TEXT_ PANE的元素;為了使指示器窗格填滿整個(gè)狀態(tài)欄,可以在CMai nFrame類的On Create函數(shù)中,代碼:m_wn dStatusBar.Set Paneln fo(0,ID_TEXT_ PANE,SB PS_STRETCH,0);將CMainFrame類的的成員變量m_wndStatusBar由protected類型改為public在SDI視圖類中加入:#i

48、 nclude Mai nFrm.h 用Ctrl+W進(jìn)入類向?qū)?,在SDI視圖類中映射WM_LBUTTONDBCL消息處理函數(shù),并增加 代碼:CMai nF rame *pF rame=(CMai nFrame *)AfxGetA pp( )-m_ pMain Wnd;CStatusBar *p Status=&p Frame-m_w ndStatusBar;if (p Status)pStatus-SetPaneText(0,雙擊鼠標(biāo));11.什么是命令更新消息?它的作用是什么?UPDATE_MAND_消息又稱為“更新命令UI消息”,該消息映射函數(shù)中有一個(gè)CCmdUI類 的對(duì)象PCmdUI, CCmdU類中包含了一個(gè)指向菜單項(xiàng)或工具欄按鈕的指針,于是利用該指針 對(duì)菜單項(xiàng)或工具欄按鈕的顯示形式進(jìn)修改。第6章框架窗口、文檔和視圖1什么是主窗口和文檔窗口? 主窗口又稱為“主框架窗口” 只能有一個(gè)主窗口,主框架窗口的標(biāo)題欄上往往顯示應(yīng)用程序的名稱。創(chuàng)建單文檔SDI或多文檔MDI應(yīng)用程序時(shí),主窗口類名是Mai nF rm.h禾R Mai

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論