![C++面向?qū)ο蟪绦蛟O(shè)計教程(第3版)--陳維興,林小茶課后習(xí)題答案_第1頁](http://file4.renrendoc.com/view/fa19c7e5ae0f99cd0fca1a3ba166c28d/fa19c7e5ae0f99cd0fca1a3ba166c28d1.gif)
![C++面向?qū)ο蟪绦蛟O(shè)計教程(第3版)--陳維興,林小茶課后習(xí)題答案_第2頁](http://file4.renrendoc.com/view/fa19c7e5ae0f99cd0fca1a3ba166c28d/fa19c7e5ae0f99cd0fca1a3ba166c28d2.gif)
![C++面向?qū)ο蟪绦蛟O(shè)計教程(第3版)--陳維興,林小茶課后習(xí)題答案_第3頁](http://file4.renrendoc.com/view/fa19c7e5ae0f99cd0fca1a3ba166c28d/fa19c7e5ae0f99cd0fca1a3ba166c28d3.gif)
![C++面向?qū)ο蟪绦蛟O(shè)計教程(第3版)--陳維興,林小茶課后習(xí)題答案_第4頁](http://file4.renrendoc.com/view/fa19c7e5ae0f99cd0fca1a3ba166c28d/fa19c7e5ae0f99cd0fca1a3ba166c28d4.gif)
![C++面向?qū)ο蟪绦蛟O(shè)計教程(第3版)--陳維興,林小茶課后習(xí)題答案_第5頁](http://file4.renrendoc.com/view/fa19c7e5ae0f99cd0fca1a3ba166c28d/fa19c7e5ae0f99cd0fca1a3ba166c28d5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
C++面向?qū)ο蟪绦蛟O(shè)計教程課后題答案1.1什么是面向?qū)ο蟪绦蛟O(shè)計?面向?qū)ο蟪绦蛟O(shè)計是一種新的程序設(shè)計范型.這種范型的主要特征是:程序=對象+消息面向?qū)ο蟪绦虻幕驹厥菍ο?。主要結(jié)構(gòu)特點是:第一,程序一般由類的定義和類的使用兩部分組成;第二,程序中的一切操作都是通過向?qū)ο蟀l(fā)送消息來實現(xiàn)的。1.2什么是對象?什么是類?對象與類之間的關(guān)系是什么?對象是描述其屬性的數(shù)據(jù)以及對這些數(shù)據(jù)施加的一組操作封裝在一起構(gòu)成的統(tǒng)一體。類就是具有相同的數(shù)據(jù)和相同的操作的一組對象的集合,也就是說,類是對具有相同數(shù)據(jù)結(jié)構(gòu)和相同操作的一類對象的描述。類和對象之間的關(guān)系是抽象和具體的關(guān)系。類是多個對象進行綜合抽象的結(jié)果,一個對象是類的一個實例。1.3現(xiàn)實世界中的對象有哪些特征?請舉例說明?,F(xiàn)實世界中的對象具有以下特征:1)2)3)4)每一個對象必須有一個名字以區(qū)別于其他對象;用屬性來描述對象的某些特征;有一組操作,每組操作決定對象的一種行為;對象的行為可以分為兩類:一類是作用于自身的行為,另一類是作用于其他對象的行為。例如一個教師是一個對象。每個教師對象有自己的名字來和別的教師區(qū)別。教師具有編號,姓名,年齡,職稱,專業(yè)等屬性。教師擁有走路,吃飯,授課等行為操作。走路,吃飯是作用于自身的行為,授課是作用于其他對象的行為。1.4什么是消息?消息具有什么性質(zhì)?一個對象向另一個對象發(fā)出的請求成為“消息”。消息具有以下3個性質(zhì):1)2)3)同一個對象可以接收不同形式的多個消息,做出不同的相應(yīng);相同形式的消息可以傳遞給不同的對象,所做出的響應(yīng)可以是不同的;對消息的響應(yīng)并不是必須的,對象可以響應(yīng)消息,也可以不響應(yīng)。1.5什么是抽象和封裝?請舉例說明。抽象是將有關(guān)事物的共性歸納、集中的過程。例如:把所有具有大學(xué)生學(xué)籍的人歸為一類,成為“大學(xué)生”,這就是一個抽象。封裝是指把數(shù)據(jù)和實現(xiàn)操作的代碼集中起來放在對象內(nèi)部,并盡可能隱藏對象的內(nèi)部細節(jié)。例如:每一臺洗衣機都有出廠日期、機器編號等屬性,也有啟動、暫停、選擇等操作。人們在使用洗衣機的時候只需要按下對應(yīng)的按鈕,而不用關(guān)心具體的內(nèi)部實現(xiàn)。這就是封裝。1.6什么是繼承?請舉例說明。繼承就是允許派生類使用基類的數(shù)據(jù)和操作,同時,派生類還可以增加新的操作和數(shù)據(jù)。例如:哺乳動物是一種熱血、有毛發(fā)、用奶哺育幼崽的動物;狗是有犬牙、食肉、特定的骨骼結(jié)構(gòu)、群居的哺乳動物。狗就繼承了哺乳動物。1.7若類之間具有繼承關(guān)系,則他們之間具有什么特征?若類之間具有繼承關(guān)系,則他們之間具有下列幾個特征:1)2)3)類間具有共享特征(包括數(shù)據(jù)和操作代碼的共享);類間具有差別或新增部分(包括非共享的數(shù)據(jù)和操作代碼);類具有層次結(jié)構(gòu)。1.8什么是單繼承、多繼承?請舉例說明。單繼承是指每個派生類只直接繼承了一個基類的特征。例如狗繼承自哺乳動物。多繼承是指多個基類派生出一個派生類的繼承關(guān)系。比如玩具車同時繼承自玩具和車。1.9什么是多態(tài)?請舉例說明。多態(tài)是指不同的對象收到相同的消息時執(zhí)行不同的操作。例如,有一個窗口類對象,還有一個棋子類對象。當我們發(fā)出“移動”消息時,兩個對象的行為不同。1.10面向?qū)ο蟪绦蛟O(shè)計的主要優(yōu)點是什么?1.可提高程序的重用性;2.可控制程序的復(fù)雜性;3.可改善程序的可維護性;4.能夠更好地支持大型程序設(shè)計;5.增強了計算機處理信息的范圍;能夠很好地適應(yīng)新的硬件環(huán)境。2.1簡述C++的主要特點。1)C++是C的超集,保持與C的兼容。2)保持了C的簡潔、高效和接近匯編語言等特點,并對C的功能作了不少擴充。用C++編寫的程序比C更安全,可讀性更好,代碼結(jié)構(gòu)更為合理。3)4)程序質(zhì)量高。增加了面向?qū)ο髾C制。2.2#include<iostream>usingnamespacestd;intmain(){inta,b,d,min;cout<<"Entertwonumbers:";cin>>a>>b;min=a>b?b:a;for(d=2;d<min;d++){if(((a%d)==0)&&((b%d)==0))break;}if(d==min){cout<<"Nocommondenominators"<<endl;return0;}cout<<"Thelowestcommondenominatoris"<<d<<endl;return0;}2.3有效2.4沒有函數(shù)聲明;函數(shù)定義沒有寫返回值類型。2.5(1)等價,函數(shù)聲明可以省略參數(shù)的名字。(2)不等價,第二個的函數(shù)定義不能省略參數(shù)的名字。2.6-2.10CDAAB2.11-2.15ACBDC2.16-2.17DC2.181012.1910102.2010202.21舉例說明可以使用const替代#define以消除#define的不安全性。#include<iostream>usingnamespacestd;intmain(){inta=1;#defineT1a+a#defineT2T1-T1cout<<"T2is"<<T2<<endl;return0;}上面這個程序,初看應(yīng)該輸出T2is0但是實際上,得出T2is2如果把#define換成const,則可以輸出想要的結(jié)果。2.22用動態(tài)分配空間的方法,計算Fibonacci數(shù)列的前20項,并存儲到動態(tài)分配的空間中。#include<iostream>usingnamespacestd;intmain(){int*pi=newint[20];*pi=1;pi[1]=1;for(inti=2;i<20;i++){pi[i]=pi[i-2]+pi[i-1];}return0;}2.23重載sroot函數(shù),輸出一個數(shù)的二次方根。#include<iostream>usingnamespacestd;doublesroot(intnum){return(double)sqrt((double)num);}doublesroot(longnum){return(double)sqrt((double)num);}doublesroot(doublenum){return(double)sqrt(num);}intmain(){return0;}2.24解決百錢問題。將一元人民幣換成1、2、5分的硬幣,有多少種換法?#include<iostream>usingnamespacestd;intmain(){intnum=0;//總共換法的總數(shù)。初始化為0。for(inti=0;i<=100;i++){for(intj=0;j<=50;j++){if((i+2*j)>100){break;}for(intk=0;k<=20;k++){if((i+2*j+5*k)==100){num++;cout<<"1分"<<i<<"個;"<<"2分"<<j<<"個;"<<"5分"<<k<<"個;"<<endl;}if((i+2*j+5*k)>100){break;}}}}cout<<num<<endl;return0;}2.25輸入兩個整數(shù),按由小到大的順序輸出。要求使用變量的引用。#include<iostream>usingnamespacestd;voidswap(int&a,int&b){a=a+b;b=a-b;a=a-b;}intmain(){inta,b;cin>>a>>b;if(a>b){swap(a,b);}cout<<a<<","<<b<<endl;return0;}2.26用二分法求解f(x)=0的根。#include<iostream>usingnamespacestd;doubleFun(doublex){return35*x+25;//假設(shè)f(x)=35x+25}intmain(){doublea,b;cin>>a;if(Fun(a)==0){cout<<"x="<<a<<endl;return0;}do{cin>>b;}while((Fun(a)*Fun(b))>=0);if(Fun(b)==0){cout<<"x="<<b<<endl;return0;}if(a>b){a=a+b;b=a-b;a=a-b;}while(1){if(Fun((a+b)/2)==0){cout<<"x="<<(a+b)/2<<endl;return0;}if(Fun(a)*Fun((a+b)/2)<0){b=(a+b)/2;}if(Fun(b)*Fun((a+b)/2)<0){a=(a+b)/2;}}return0;}3.1類聲明的一般格式是什么?class類名{[private:]私有數(shù)據(jù)成員和成員函數(shù)public:公有數(shù)據(jù)成員和成員函數(shù)}3.2構(gòu)造函數(shù)和析構(gòu)函數(shù)的主要作用是什么?它們各自有什么特性?構(gòu)造函數(shù)是一種特殊的成員函數(shù),它主要用于為對象分配空間,進行初始化。構(gòu)造函數(shù)的名字必須與類名相同,而不能由用戶任意命名。它可以有任意類型的參數(shù),但不能具有返回值類型。析構(gòu)函數(shù)通常用于執(zhí)行一些清理任務(wù),如釋放分配給對象的內(nèi)存空間等。析構(gòu)函數(shù)名與類名相同,但它前面必須加一個波浪號。不能有返回值,也不能有參數(shù)。3.3什么是對象數(shù)組?所謂對象數(shù)組,是指每一個數(shù)組元素都是對象的數(shù)組。3.4什么是this指針?它的主要作用是什么?C++為成員函數(shù)提供了一個名為this的指針,這個指針稱為自引用指針。每當創(chuàng)建一個對象時,系統(tǒng)就把this指針初始化為指向該對象。一個類的所有對象合用一份成員函數(shù),this指針可以幫助對象辨別出當前調(diào)用的是自己的那個對象的數(shù)據(jù)成員和函數(shù)。3.5友元函數(shù)有什么作用?友元函數(shù)可以在類的外部訪問類的私有成員或保護成員。3.6(1)聲明并定義了P2,P3,并用默認無參構(gòu)造函數(shù)初始化。(2)聲明并定義了P2,并調(diào)用Point類的拷貝構(gòu)造函數(shù)用P1對P2進行初始化。(3)聲明并定義了P2,并調(diào)用Point類的拷貝構(gòu)造函數(shù)用P1對P2進行初始化。(4)調(diào)用拷貝構(gòu)造函數(shù),將P1的成員值賦值給P4的成員。3.7-3.10BCCB3.11-3.15BAABA3.16-3.17BB3.1810,2030,4850,6870,8090,1611,1203.19Constructing10100Destructing3.203objectsinexistence4objectsinexistenceafterallocation3objectsinexistenceafterdeletion3.21Countingat0Countingat93.22Defaultconstructorcalled.Defaultconstructorcalled.Defaultconstructorcalled.Construcotor:a=1,b=2Construcotor:a=3,b=4Construcotor:a=5,b=63.23Con.Copycon.default.Copycon.3.24A=5B=14A=9B=143.255,722.253.26ConstructingConstructingA=5B=15A=10B=15DestructingDestructing3.27voidpintStu();函數(shù)只有聲明,沒有定義。age是私有成員,不能用對象直接調(diào)用。3.28voidprintStu()和voidsetSno(ints)沒有加限定符Student::voidsetAge(inta)在類中沒有聲明3.29構(gòu)造函數(shù)不能定義為私有。否則無法創(chuàng)建對象。3.30下面是一個計算器類的定義,請完成該類成員函數(shù)的實現(xiàn)。classcounter{public:counter(intnumber);voidincrement();voiddecrement();intgetvalue();intprint();//給原始值加1//給原始值減1//取的計數(shù)器值//顯示計數(shù)private:intvalue;};counter::counter(intnumber){value=number;}voidcounter::increment(){++value;}voidcounter::decrement(){--value;}intcounter::getvalue(){returnvalue;}intcounter::print(){cout<<value<<endl;returnvalue;}3.31根據(jù)注釋語句提示,實現(xiàn)類Date的成員函數(shù)#include<iostream>usingnamespacestd;classDate{public:voidprintDate();voidsetDay(intd);voidsetMonth(intm);voidsetYear(inty);private:intday,month,year;};voidDate::printDate(){cout<<"今天是"<<year<<"年"<<month<<"月"<<day<<"日"<<endl;}voidDate::setDay(intd){day=d;}voidDate::setMonth(intm){month=m;}voidDate::setYear(inty){year=y;}intmain(){DatetestDay;testDay.setDay(5);testDay.setMonth(10);testDay.setYear(2003);testDay.printDate();return0;}3.32建立類cylinder,cylinder的構(gòu)造函數(shù)被傳遞了兩個double值,分別表示圓柱體的半徑和高度。用類cylinder計算圓柱體的體積,并存儲在一個double變量中。在類cylinder中包含一個成員函數(shù)vol,用來顯示每個cylinder對象的體積。constintPI=3.14;classcylinder{private:doubleradius,height,volume;public:cylinder(intrad,inthei);doublegetVolume();voidvol();};cylinder::cylinder(intrad,inthei){radius=rad;height=hei;}doublecylinder::getVolume(){volume=PI*radius*radius*height;returnvolume;}voidcylinder::vol(){cout<<"圓柱體的體積是:"<<volume<<endl;}3.33構(gòu)建一個類book,其中包含有兩個私有數(shù)據(jù)成員qu和price,將qu初始化為1~5,將price初始化為qu的10倍,建立一個有5個元素的數(shù)組對象。顯示每個對象數(shù)組元素的qu*price值。classbook{private:intqu,price;public:book(intqu);intmult();};book::book(intq){if(q<1||q>5){qu=1;}else{qu=q;}price=10*qu;}intbook::mult(){returnqu*price;}intmain(){bookbooks[5]={1,2,3,4,5};for(inti=0;i<5;i++){cout<<books[i].mult()<<"";}}3.34修改3.33,通過對象指針訪問對象數(shù)組,使程序以相反的順序顯示每個對象數(shù)組元素的qu*price值。classbook{private:intqu,price;public:book(intqu);intmult();};book::book(intq){if(q<1||q>5){qu=1;}else{qu=q;}price=10*qu;}intbook::mult(){returnqu*price;}intmain(){bookbooks[5]={1,2,3,4,5};book*p=books;p+=4;for(inti=0;i<5;i++){cout<<p->mult()<<"";--p;}return0;}3.35構(gòu)建一個類Stock,含字符數(shù)組stockcode[]及整型數(shù)組成員quan、雙精度型數(shù)據(jù)成員price。構(gòu)造函數(shù)含3個參數(shù):字符數(shù)組na[]及q、p。當定義Stock的類對象時,將對象的第一個字符串參數(shù)賦給數(shù)據(jù)成員stockcode,第2和第3個參數(shù)分別賦給quan、price。未設(shè)置第2和第3個參數(shù)時,quan的值為1000,price的值為8.98.成員函數(shù)print沒有形參,需使用this指針,顯示對象數(shù)據(jù)成員的內(nèi)容。編寫程序顯示對象數(shù)據(jù)成員的值。#include<iostream>usingnamespacestd;classStock{private:charstockcode[25];intquan;doubleprice;public:Stock(charna[],intq=1000,doublep=8.98);Stock(charna[]);voidprint();};Stock::Stock(charna[],intq=1000,doublep=8.98){strcpy(stockcode,na);quan=q;price=p;}voidStock::print(){cout<<"stockcode:"<<this->stockcode<<"quan:"<<this->quan<<"price:"<<this->price<<endl;}intmain(){Stockstock1("600001",3000,5.67);Stockstock2("600002");stock1.print();stock2.print();return0;}3.36編寫一個程序,已有若干學(xué)生的數(shù)據(jù),包括學(xué)號、姓名、成績,要求輸出這些學(xué)生的數(shù)據(jù)并計算出學(xué)生人數(shù)和平均成績(要求將學(xué)生人數(shù)和總成績用靜態(tài)數(shù)據(jù)成員表示)。#include<iostream>usingnamespacestd;classstudent{private:charname[25],studentNo[10];intscore;staticintsum;staticinttotalScore;public:student(charna[],charstuNo[],intsc);voidshow();staticvoidshowTotal();};student::student(charna[],charstuNo[],intsc){strcpy(name,na);strcpy(studentNo,stuNo);score=sc;++sum;totalScore+=sc;}voidstudent::show(){cout<<"姓名:"<<name<<endl;cout<<"學(xué)號:"<<studentNo<<endl;cout<<"成績:"<<score<<endl;}voidstudent::showTotal(){cout<<"總?cè)藬?shù):"<<sum<<endl;cout<<"平均成績:"<<(double)totalScore/sum<<endl;}intstudent::sum=0;intstudent::totalScore=0;intmain(){students1("張無忌","111254",75);students2("李莫愁","254114",60);students3("小龍女","112587",88);s1.show();s2.show();s3.show();student::showTotal();return0;}4.1有哪幾種繼承方式?每種方式的派生類對基類成員的繼承性如何?公有繼承,私有繼承和保護繼承?;惖乃接谐蓡T,無論哪種繼承方式都不能訪問。公有繼承不改變基類的公有和保護成員的訪問限制。私有繼承將基類的公有和保護成員都變成私有。保護繼承將基類的公有和保護成員都變成保護。4.2派生類能否直接訪問基類的私有成員?若否,應(yīng)如何實現(xiàn)?不能??梢栽诨惱锾砑右粋€公有成員函數(shù)來訪問私有成員,派生類就能繼承這個公有成員函數(shù),實現(xiàn)對基類私有成員的訪問。4.3保護成員有哪些特性?保護成員以公有方式或私有方式繼承后的訪問特性如何?保護成員只能被本類或本類的派生類所訪問,在類或派生類外是不能被訪問的。后面一問見第一題的答案。4.4派生類構(gòu)造函數(shù)和析構(gòu)函數(shù)的執(zhí)行順序是怎樣的?構(gòu)造函數(shù)是先執(zhí)行父類的構(gòu)造函數(shù),再執(zhí)行類中其他類對象的構(gòu)造函數(shù),再執(zhí)行本類的構(gòu)造函數(shù)。如果同級有多個構(gòu)造函數(shù),則按聲明順序執(zhí)行。析構(gòu)函數(shù)與構(gòu)造函數(shù)的執(zhí)行順序剛好相反。4.5派生類構(gòu)造函數(shù)和析構(gòu)函數(shù)的構(gòu)造規(guī)則是怎樣的?派生類名(參數(shù)總表):基類名(參數(shù)總表){派生類新增數(shù)據(jù)成員的初始化語句}派生類中的析構(gòu)函數(shù)與基類無關(guān)。4.6什么是多繼承?多繼承時,構(gòu)造函數(shù)與析構(gòu)函數(shù)的執(zhí)行順序是怎樣的?多繼承是指一個類同時繼承自多個不同的基類。執(zhí)行順序同4.44.7在類的派生中為何要引入虛基類?虛基類構(gòu)造函數(shù)的調(diào)用順序是如何規(guī)定的?如果一個類有多個直接基類,而這些直接基類又有一個共同的基類,則在最底層的派生類中會保留這個簡介的共同基類數(shù)據(jù)成員的多份同名成員。在訪問這些同名成員的時候,會產(chǎn)生二義性。為了解決二義性,引入了虛基類。1)如果虛基類中定義有帶形參的構(gòu)造函數(shù),并且沒有定義默認形式的構(gòu)造函數(shù),則整個繼承結(jié)構(gòu)中,所有直接或間接的派生類都必須在構(gòu)造函數(shù)的成員初始化表中列出對虛基類構(gòu)造函數(shù)的調(diào)用,以初始化在虛基類中定義的數(shù)據(jù)成員。2)建立一個對象時,如果這個對象中含有從虛基類繼承來的成員,則虛基類的成員是由最遠派生類的構(gòu)造函數(shù)通過調(diào)用虛基類的構(gòu)造函數(shù)進行初始化的。該派生類的其他基類對虛基類構(gòu)造函數(shù)的調(diào)用都自動被忽略。3)若同一層次中同時包含虛基類和非虛基類,應(yīng)先調(diào)用虛基類的構(gòu)造函數(shù),再調(diào)用非虛基類的構(gòu)造函數(shù),最后調(diào)用派生類的構(gòu)造函數(shù)。4.8-4.11ACCB4.12ConstructorB1.ConstructorB2.ConstructorA.3214.13主食=bread副食=steak4.140,0,00,1,03,6,94.15ConstructorB1.ConstructorB2.ConstructorB3.ConstructorA.124,34.1644.17(1,2)5,6(6,9)4.18classbase1classbase2classlevel2classbase2classlevel1classtoplevel4.19#include<iostream>usingnamespacestd;#include<iomanip>classtable{public:table(intp,intq){i=p;j=q;}voidascii(void);protected:inti,j;};voidtable::ascii(){intk=1;for(;i<=j;i++){cout<<setw(4)<<i<<""<<(char)i;if((k)%12==0){cout<<"\n";}k++;}cout<<"\n";}classder_table:publictable{public:der_table(intp,intq,char*m):table(p,q){c=m;}voidprint();protected:char*c;};voidder_table::print(){cout<<c<<"\n";table::ascii();}intmain(){der_tableob('a','z',"ASCIIvalue---char");ob.print();return0;}4.20#include<iostream>usingnamespacestd;#include<iomanip>classarea_c1{protected:doubleheight;doublewidth;public:area_c1(doubler,doubles){height=r;width=s;}virtualdoublearea()=0;};classrectangle:publicarea_c1{public:rectangle(doubler,doubles):area_c1(r,s){}virtualdoublearea();};doublerectangle::area(){returnheight*width;}classisosceles:publicarea_c1{public:isosceles(doubler,doubles):area_c1(r,s){}virtualdoublearea();};doubleisosceles::area(){return(height*width)/2;}intmain(){rectangler(10,5);isoscelesi(4,6);area_c1*a;a=&r;cout<<"矩形的面積是:"<<a->area()<<endl;a=&i;cout<<"三角形的面積是:"<<a->area()<<endl;return0;}4.21#include<iostream>usingnamespacestd;#include<iomanip>classTime{public:Time(inth,intm,ints){hours=h;minutes=m;seconds=s;}voiddisplay(){cout<<"出生時間:"<<hours<<"時"<<minutes<<"分"<<seconds<<"秒"<<endl;}protected:inthours,minutes,seconds;};classDate{public:Date(intm,intd,inty){month=m;day=d;year=y;}voiddisplay(){cout<<"出生年月:"<<year<<"年"<<month<<"月"<<day<<"日"<<endl;}protected:intmonth,day,year;};classBirthtime:publicTime,publicDate{public:Birthtime(charname[],intm,intd,inty,inth,intmi,ints):Time(h,mi,s),Date(m,d,y){strcpy(Childname,name);}voidshowName(){cout<<"我的名字是:"<<Childname<<endl;}private:charChildname[25];};intmain(){Birthtimeb("xiaoming",3,6,2012,11,12,42);b.showName();b.Time::display();b.Date::display();return0;}4.22#include<iostream>usingnamespacestd;#include<iomanip>classperson{protected:charnumber[25];charname[25];public:person(charnum[],charna[]){strcpy(number,num);strcpy(name,na);}voidshowName(){cout<<"編號:"<<number<<"姓名:"<<name;}};classstudent:publicperson{private:intclassNumber,score;public:student(charnum[],charna[],intcNumber,intsc):person(num,na){classNumber=cNumber;score=sc;}voidshow(){showName();cout<<"班號:"<<classNumber<<"成績:"<<score<<endl;}};classteacher:publicperson{private:chartitle[25],department[25];public:teacher(charnum[],charna[],chartit[],chardepart[]):person(num,na){strcpy(title,tit);strcpy(department,depart);}voidshow(){showName();cout<<"職稱:"<<title<<"部門:"<<department<<endl;}}C++第五章習(xí)題1.什么是靜態(tài)聯(lián)編?什么是動態(tài)聯(lián)編?靜態(tài)聯(lián)編是指系統(tǒng)在編譯時就決定如何實現(xiàn)某一動作。動態(tài)聯(lián)編是指系統(tǒng)在運行時動態(tài)實現(xiàn)某一動作。1.編譯時的多態(tài)性與運行時的多態(tài)性有什么區(qū)別?他們的實現(xiàn)方式有什么不同?靜態(tài)聯(lián)編支持的多態(tài)性稱為編譯時多態(tài)性,也稱靜態(tài)多態(tài)性。編譯時多態(tài)性是通過函數(shù)重載和模板實現(xiàn)的。動態(tài)聯(lián)編所支持的多態(tài)性稱為運行時多態(tài)性,也稱動態(tài)多態(tài)性。是通過虛函數(shù)來實現(xiàn)的。1.簡述運算符重載規(guī)則。a)b)c)C++中絕大部分的運算符允許重載。C++只能對已有的C++運算符進行重載。運算符重載是針對新類型數(shù)據(jù)的實際需要,對原有運算符進行適當?shù)母脑焱瓿?。?yīng)與原有的功能相類似。d)e)重載不能改變運算符的操作對象的個數(shù)。重載不能改變運算符原有的優(yōu)先級。f)不能改變原有的結(jié)合特性。g)h)i)參數(shù)至少應(yīng)有一個是類對象。重載函數(shù)可以是普通函數(shù),也可以是類的成員函數(shù),也可以是類的友元函數(shù)。一般用于類對象的運算符除了賦值運算符都要重載。1.友元運算符函數(shù)和成員運算符函數(shù)有什么不同?a)對于雙目運算符,成員運算符重載含有一個參數(shù),友元重載含有兩個參數(shù);對于單目運算符,成員重載沒有參數(shù),友元重載有一個參數(shù)。b)雙目運算符一般可以被重載為友元或成員。但是如果將一個對象和一個普通類型運算,必須重載為友元。c)調(diào)用方式不同。d)一般,雙目運算符用友元,單目運算符用成員。如果操作數(shù)有隱式類型轉(zhuǎn)換,則必須用友元。1.什么是虛函數(shù)?虛函數(shù)與函數(shù)重載有哪些相同點與不同點?虛函數(shù)就是在基類中被關(guān)鍵字virtual說明,并在派生類中重新定義的函數(shù)。函數(shù)名都相同。重載函數(shù)的參數(shù)個數(shù)或參數(shù)類型必須有所不同。虛函數(shù)要求函數(shù)名,返回類型,參數(shù)個數(shù),參數(shù)的類型和順序與基類中的虛函數(shù)原型完全相同。1.什么是純虛函數(shù)?什么是抽象類?純虛函數(shù)是一個在基類中說明的虛函數(shù),它在該基類中沒有定義,但要求在它的派生類中根據(jù)需要對它進行定義,或仍說明為純虛函數(shù)。如果一個類至少有一個純虛函數(shù),那么就稱這個類為抽象類。7-12DAADCC13.不對,參數(shù)個數(shù)必須一樣。14.7615.Thisisc++book.第一個字符:T第16個字符:.第26個字符:數(shù)組下標超界!16.m=1.5千米17.#include<iostream>usingnamespacestd;classtwoDArray{inta[2][3];public:twoDArray(){for(inti=0;i<2;i++)for(intj=0;j<3;j++)a[i][j]=5;}twoDArray(intb[][3]){for(inti=0;i<2;i++)for(intj=0;j<3;j++)a[i][j]=b[i][j];}voidshow();twoDArrayoperator+(twoDArrayn);twoDArrayoperator-(twoDArrayn);};voidtwoDArray::show(){for(inti=0;i<2;i++){for(intj=0;j<3;j++)cout<<a[i][j];cout<<endl;}}twoDArraytwoDArray::operator+(twoDArrayn){twoDArraytemp;for(inti=0;i<2;i++)for(intj=0;j<3;j++)temp.a[i][j]=a[i][j]+n.a[i][j];returntemp;}twoDArraytwoDArray::operator-(twoDArrayn){twoDArraytemp;for(inti=0;i<2;i++)for(intj=0;j<3;j++)temp.a[i][j]=a[i][j]-n.a[i][j];returntemp;}intmain(){inta[2][3];for(inti=0;i<2;i++)for(intj=0;j<3;j++)cin>>a[i][j];twoDArraya1,a2(a),total,sub;total=a1+a2;sub=a1-a2;total.show();sub.show();return0;}18.#include<iostream>usingnamespacestd;classtwoDArray{inta[2][3];public:twoDArray(){for(inti=0;i<2;i++)for(intj=0;j<3;j++)a[i][j]=5;}twoDArray(intb[][3]){for(inti=0;i<2;i++)for(intj=0;j<3;j++)a[i][j]=b[i][j];}voidshow();friendtwoDArrayoperator+(twoDArraym,twoDArrayn);friendtwoDArrayoperator-(twoDArraym,twoDArrayn);};voidtwoDArray::show(){for(inti=0;i<2;i++){for(intj=0;j<3;j++)cout<<a[i][j];cout<<endl;}}twoDArrayoperator+(twoDArraym,twoDArrayn){twoDArraytemp;for(inti=0;i<2;i++)for(intj=0;j<3;j++)temp.a[i][j]=m.a[i][j]+n.a[i][j];returntemp;}twoDArrayoperator-(twoDArraym,twoDArrayn){twoDArraytemp;for(inti=0;i<2;i++)for(intj=0;j<3;j++)temp.a[i][j]=m.a[i][j]-n.a[i][j];returntemp;}intmain(){inta[2][3];for(inti=0;i<2;i++)for(intj=0;j<3;j++)cin>>a[i][j];twoDArraya1,a2(a),total,sub;total=a1+a2;sub=a1-a2;total.show();sub.show();return0;}19.#include<iostream>usingnamespacestd;classcomplex{doublereal,imag;public:complex(doublere,doubleim){real=re;imag=im;}friendcomplexoperator+(complexa,complexb);voidprint();};complexoperator+(complexa,complexb){returncomplex(a.real+b.real,a.imag+b.imag);}voidcomplex::print(){cout<<"("<<real<<","<<imag<<")"<<endl;}intmain(){complexc1(2.5,3.7);complexc2(4.2,6.5);complextotal=c1+c2;total.print();return0;}20.#include<iostream>usingnamespacestd;constdoublePI=3.14;classContainer{protected:doubler,d;//如果是球形,r是半徑,d為0.如果是圓柱體,r為底面半徑,d為高。如果是正方體,r為邊長,d為0。public:Container(doublea,doubleb=0){r=a;d=b;}virtualdoubleserface()=0;//計算表面積virtualdoublevolume()=0;//計算體積};classSphere:publicContainer{public:Sphere(doubler):Container(r){}doubleserface();doublevolume();};doubleSphere::serface(){return4*PI*r*r;}doubleSphere::volume(){returnPI*r*r*r;}classCylinder:publicContainer{public:Cylinder(doublea,doubleb):Container(a,b){}doubleserface();doublevolume();};doubleCylinder::serface(){return2*PI*r*d+PI*r*r;}doubleCylinder::volume(){returnPI*r*r*d;}classCube:publicContainer{public:Cube(doublea):Container(a){}doubleserface();doublevolume();}doubleCube::serface(){return6*r*r;}doubleCube::volume(){returnr*r*r;}7.1C++為什么要有自己的輸入輸出系統(tǒng)?C++的編譯系統(tǒng)對數(shù)據(jù)類型進行嚴格的檢查,凡是類型不正確的數(shù)據(jù)都不可能通過編譯。C++中需要定義眾多的用戶自定義類型且能夠輸入輸出。7.2C++有哪4個預(yù)定義的流對象?他們分別與什么具體設(shè)備相關(guān)聯(lián)?標準輸入流對象cin、標準輸出流對象cout、非緩沖型的標準出錯流對象cerr和緩沖型的標準出錯流對象clog。cin對應(yīng)標準輸入設(shè)備cout對應(yīng)標準輸出設(shè)備cerr對應(yīng)標準錯誤輸出設(shè)備clog對應(yīng)標準錯誤輸出設(shè)備7.3.cerr和clog間的區(qū)別是?cerr不經(jīng)過緩沖區(qū)直接顯示錯誤信息。而clog存放在緩沖區(qū),緩沖區(qū)滿或遇上endl時再輸出。7.4C++提供哪兩種控制輸入輸出格式的方法?一種是使用ios類中的有關(guān)格式控制的流成員函數(shù)進行格式控制,另一種是使用稱為操縱符的特殊類型的函數(shù)控制。7.5C++進行文件輸入輸出的基本過程是什么?首先創(chuàng)建一個流對象,然后將這個流對象與文件相關(guān)聯(lián),即打開文件,此時才能進行讀寫操作,讀寫操作完成后再關(guān)閉這個文件。7.6-7.8BCA7.9#include<iostream>#include<iomanip>usingnamespacestd;intfactorial(intn){if(n==0||n==1)returnn;returnfactorial(n-1)*n;}intmain(){for(inti=1;i<=9;i++){cout<<setw(5)<<factorial(i);if(i%3==0){cout<<endl;}}return0;}7.10#include<iostream>#include<iomanip>usingnamespacestd;intmain(){for(inti=1;i<=7;i++){cout<<setw(16-i);for(intj=1;j<=(2*i-1);j++){cout<<'A';}cout<<endl;}return0;}7.11#include<iostream>#include<iomanip>usingnamespacestd;classmatrix{private:intdata[2][3];public:matrix(){}friendostream&operator<<(ostream&,matrix&);friendistream&operator>>(istream&,matrix&);friendmatrixoperator+(matrix&,matrix&);};ostream&operator<<(ostream&os,matrix&a){for(inti=0;i<2;i++){for(intj=0;j<3;j++){os<<a.data[i][j]<<"";}os<<endl;}returnos;}istream&operator>>(istream&in,matrix&a){cout<<"請輸入一個2行3列矩陣:"<<endl;for(inti=0;i<2;i++){for(intj=0;j<3;j++){in>>a.data[i][j];}}returnin;}matrixoperator+(matrix&a,matrix&b){matrixtemp;for(inti=0;i<2;i++){for(intj=0;j<3;
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年的合同延續(xù)與權(quán)利轉(zhuǎn)讓協(xié)議樣本
- 2025年企業(yè)租賃新能源汽車合作合同
- 2025年企業(yè)市場營銷策劃委托協(xié)議書樣本
- 2025年合作伙伴店鋪聯(lián)合經(jīng)營協(xié)議
- 2025年共發(fā)展合作協(xié)議示例
- 2025年居民小區(qū)消防系統(tǒng)設(shè)計申請與施工協(xié)議
- 2025年先進技術(shù)許可合同規(guī)范模板
- 2025年全球貿(mào)易增長與多邊合作協(xié)議
- 2025年協(xié)作一致行動人協(xié)議樣本
- 2025年大型卡車租賃服務(wù)合同
- GMS要素-持續(xù)改進(CI)-上汽通用五菱-課件
- 信訪事項復(fù)查復(fù)核申請書
- 神經(jīng)遞質(zhì)和神經(jīng)調(diào)質(zhì)生
- 18CS01 裝配式箱泵一體化消防給水泵站選用及安裝-MX智慧型泵站
- 枇杷常見病蟲害一覽表專家講座
- 《紙杯變變變》教學(xué)設(shè)計
- 九九乘法口訣表(超清晰打印版)
- GA/T 1780-2021多道心理測試實驗室建設(shè)規(guī)范
- PPT模板第二講運動選材概述運動選材學(xué)
- 營養(yǎng)學(xué)基礎(chǔ)知識-課件
評論
0/150
提交評論