




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
./C++面向?qū)ο蟪绦蛟O(shè)計(jì)教程課后題答案1.1
什么是面向?qū)ο蟪绦蛟O(shè)計(jì)?面向?qū)ο蟪绦蛟O(shè)計(jì)是一種新的程序設(shè)計(jì)范型.這種范型的主要特征是:程序=對(duì)象+消息面向?qū)ο蟪绦虻幕驹厥菍?duì)象.主要結(jié)構(gòu)特點(diǎn)是:第一,
程序一般由類的定義和類的使用兩部分組成;第二,
程序中的一切操作都是通過(guò)向?qū)ο蟀l(fā)送消息來(lái)實(shí)現(xiàn)的.1.2
什么是對(duì)象?什么是類?對(duì)象與類之間的關(guān)系是什么?對(duì)象是描述其屬性的數(shù)據(jù)以及對(duì)這些數(shù)據(jù)施加的一組操作封裝在一起構(gòu)成的統(tǒng)一體.類就是具有相同的數(shù)據(jù)和相同的操作的一組對(duì)象的集合,也就是說(shuō),類是對(duì)具有相同數(shù)據(jù)結(jié)構(gòu)和相同操作的一類對(duì)象的描述.類和對(duì)象之間的關(guān)系是抽象和具體的關(guān)系.類是多個(gè)對(duì)象進(jìn)行綜合抽象的結(jié)果,一個(gè)對(duì)象是類的一個(gè)實(shí)例.1.3
現(xiàn)實(shí)世界中的對(duì)象有哪些特征?請(qǐng)舉例說(shuō)明.現(xiàn)實(shí)世界中的對(duì)象具有以下特征:1>
每一個(gè)對(duì)象必須有一個(gè)名字以區(qū)別于其他對(duì)象;2>
用屬性來(lái)描述對(duì)象的某些特征;3>
有一組操作,每組操作決定對(duì)象的一種行為;4>
對(duì)象的行為可以分為兩類:一類是作用于自身的行為,另一類是作用于其他對(duì)象的行為.例如一個(gè)教師是一個(gè)對(duì)象.每個(gè)教師對(duì)象有自己的名字來(lái)和別的教師區(qū)別.教師具有編號(hào),姓名,年齡,職稱,專業(yè)等屬性.教師擁有走路,吃飯,授課等行為操作.走路,吃飯是作用于自身的行為,授課是作用于其他對(duì)象的行為.1.4
什么是消息?消息具有什么性質(zhì)?一個(gè)對(duì)象向另一個(gè)對(duì)象發(fā)出的請(qǐng)求成為"消息".消息具有以下3個(gè)性質(zhì):1>
同一個(gè)對(duì)象可以接收不同形式的多個(gè)消息,做出不同的相應(yīng);2>
相同形式的消息可以傳遞給不同的對(duì)象,所做出的響應(yīng)可以是不同的;3>
對(duì)消息的響應(yīng)并不是必須的,對(duì)象可以響應(yīng)消息,也可以不響應(yīng).1.5
什么是抽象和封裝?請(qǐng)舉例說(shuō)明.抽象是將有關(guān)事物的共性歸納、集中的過(guò)程.例如:把所有具有大學(xué)生學(xué)籍的人歸為一類,成為"大學(xué)生",這就是一個(gè)抽象.封裝是指把數(shù)據(jù)和實(shí)現(xiàn)操作的代碼集中起來(lái)放在對(duì)象內(nèi)部,并盡可能隱藏對(duì)象的內(nèi)部細(xì)節(jié).例如:每一臺(tái)洗衣機(jī)都有出廠日期、機(jī)器編號(hào)等屬性,也有啟動(dòng)、暫停、選擇等操作.人們?cè)谑褂孟匆聶C(jī)的時(shí)候只需要按下對(duì)應(yīng)的按鈕,而不用關(guān)心具體的內(nèi)部實(shí)現(xiàn).這就是封裝.1.6
什么是繼承?請(qǐng)舉例說(shuō)明.繼承就是允許派生類使用基類的數(shù)據(jù)和操作,同時(shí),派生類還可以增加新的操作和數(shù)據(jù).例如:哺乳動(dòng)物是一種熱血、有毛發(fā)、用奶哺育幼崽的動(dòng)物;狗是有犬牙、食肉、特定的骨骼結(jié)構(gòu)、群居的哺乳動(dòng)物.狗就繼承了哺乳動(dòng)物.1.7
若類之間具有繼承關(guān)系,則他們之間具有什么特征?若類之間具有繼承關(guān)系,則他們之間具有下列幾個(gè)特征:1>
類間具有共享特征〔包括數(shù)據(jù)和操作代碼的共享;2>
類間具有差別或新增部分〔包括非共享的數(shù)據(jù)和操作代碼;3>
類具有層次結(jié)構(gòu).1.8
什么是單繼承、多繼承?請(qǐng)舉例說(shuō)明.單繼承是指每個(gè)派生類只直接繼承了一個(gè)基類的特征.例如狗繼承自哺乳動(dòng)物.多繼承是指多個(gè)基類派生出一個(gè)派生類的繼承關(guān)系.比如玩具車同時(shí)繼承自玩具和車.1.9
什么是多態(tài)?請(qǐng)舉例說(shuō)明.多態(tài)是指不同的對(duì)象收到相同的消息時(shí)執(zhí)行不同的操作.例如,有一個(gè)窗口類對(duì)象,還有一個(gè)棋子類對(duì)象.當(dāng)我們發(fā)出"移動(dòng)"消息時(shí),兩個(gè)對(duì)象的行為不同.1.10
面向?qū)ο蟪绦蛟O(shè)計(jì)的主要優(yōu)點(diǎn)是什么?可提高程序的重用性;可控制程序的復(fù)雜性;可改善程序的可維護(hù)性;能夠更好地支持大型程序設(shè)計(jì);增強(qiáng)了計(jì)算機(jī)處理信息的范圍;能夠很好地適應(yīng)新的硬件環(huán)境.2.1簡(jiǎn)述C++的主要特點(diǎn).1>
C++是C的超集,保持與C的兼容.2>
保持了C的簡(jiǎn)潔、高效和接近匯編語(yǔ)言等特點(diǎn),并對(duì)C的功能作了不少擴(kuò)充.用C++編寫的程序比C更安全,可讀性更好,代碼結(jié)構(gòu)更為合理.3>
程序質(zhì)量高.4>
增加了面向?qū)ο髾C(jī)制.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沒(méi)有函數(shù)聲明;
函數(shù)定義沒(méi)有寫返回值類型.2.5〔1等價(jià),函數(shù)聲明可以省略參數(shù)的名字.
〔2不等價(jià),第二個(gè)的函數(shù)定義不能省略參數(shù)的名字.2.6-2.10CDAAB2.11-2.15ACBDC2.16-2.17DC2.181012.1910102.2010202.21舉例說(shuō)明可以使用const替代#define以消除#define的不安全性.#include<iostream>usingnamespacestd;intmain<>{inta=1;#defineT1a+a#defineT2T1-T1cout<<"T2is"<<T2<<endl;return0;}上面這個(gè)程序,初看應(yīng)該輸出T2is0但是實(shí)際上,得出T2is2如果把#define換成const,則可以輸出想要的結(jié)果.2.22用動(dòng)態(tài)分配空間的方法,計(jì)算Fibonacci數(shù)列的前20項(xiàng),并存儲(chǔ)到動(dòng)態(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ù),輸出一個(gè)數(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解決百錢問(wèn)題.將一元人民幣換成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<<"個(gè);"<<"2分"<<j<<"個(gè);"<<"5分"<<k<<"個(gè);"<<endl;}if<<i+2*j+5*k>>100>{break;}}}}cout<<num<<endl;return0;}2.25輸入兩個(gè)整數(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ù),它主要用于為對(duì)象分配空間,進(jìn)行初始化.構(gòu)造函數(shù)的名字必須與類名相同,而不能由用戶任意命名.它可以有任意類型的參數(shù),但不能具有返回值類型.析構(gòu)函數(shù)通常用于執(zhí)行一些清理任務(wù),如釋放分配給對(duì)象的內(nèi)存空間等.析構(gòu)函數(shù)名與類名相同,但它前面必須加一個(gè)波浪號(hào).不能有返回值,也不能有參數(shù).3.3什么是對(duì)象數(shù)組?
所謂對(duì)象數(shù)組,是指每一個(gè)數(shù)組元素都是對(duì)象的數(shù)組.3.4什么是this指針?它的主要作用是什么?
C++為成員函數(shù)提供了一個(gè)名為this的指針,這個(gè)指針?lè)Q為自引用指針.每當(dāng)創(chuàng)建一個(gè)對(duì)象時(shí),系統(tǒng)就把this指針初始化為指向該對(duì)象.
一個(gè)類的所有對(duì)象合用一份成員函數(shù),this指針可以幫助對(duì)象辨別出當(dāng)前調(diào)用的是自己的那個(gè)對(duì)象的數(shù)據(jù)成員和函數(shù).3.5友元函數(shù)有什么作用?
友元函數(shù)可以在類的外部訪問(wèn)類的私有成員或保護(hù)成員.3.6〔1聲明并定義了P2,P3,并用默認(rèn)無(wú)參構(gòu)造函數(shù)初始化.〔2聲明并定義了P2,并調(diào)用Point類的拷貝構(gòu)造函數(shù)用P1對(duì)P2進(jìn)行初始化.〔3聲明并定義了P2,并調(diào)用Point類的拷貝構(gòu)造函數(shù)用P1對(duì)P2進(jìn)行初始化.〔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.19
Constructing
10
100
Destructing3.20
3objectsinexistence
4objectsinexistenceafterallocation
3objectsinexistenceafterdeletion3.21
Countingat0
Countingat93.22
Defaultconstructorcalled.
Defaultconstructorcalled.
Defaultconstructorcalled.
Construcotor:a=1,b=2
Construcotor:a=3,b=4
Construcotor:a=5,b=63.23
Con.
Copycon.
default.
Copycon.3.24
A=5
B=14
A=9
B=143.25
5,7
22.253.26
Constructing
Constructing
A=5
B=15
A=10
B=15
Destructing
Destructing3.27
voidpintStu<>;函數(shù)只有聲明,沒(méi)有定義.
age是私有成員,不能用對(duì)象直接調(diào)用.3.28
voidprintStu<>和voidsetSno<ints>沒(méi)有加限定符Student::
voidsetAge<inta>在類中沒(méi)有聲明3.29
構(gòu)造函數(shù)不能定義為私有.否則無(wú)法創(chuàng)建對(duì)象.3.30下面是一個(gè)計(jì)算器類的定義,請(qǐng)完成該類成員函數(shù)的實(shí)現(xiàn).classcounter{public:counter<intnumber>;voidincrement<>;//給原始值加1voiddecrement<>;//給原始值減1intgetvalue<>;//取的計(jì)數(shù)器值intprint<>;//顯示計(jì)數(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ù)注釋語(yǔ)句提示,實(shí)現(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ù)被傳遞了兩個(gè)double值,分別表示圓柱體的半徑和高度.用類cylinder計(jì)算圓柱體的體積,并存儲(chǔ)在一個(gè)double變量中.在類cylinder中包含一個(gè)成員函數(shù)vol,用來(lái)顯示每個(gè)cylinder對(duì)象的體積.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)建一個(gè)類book,其中包含有兩個(gè)私有數(shù)據(jù)成員qu和price,將qu初始化為1~5,將price初始化為qu的10倍,建立一個(gè)有5個(gè)元素的數(shù)組對(duì)象.顯示每個(gè)對(duì)象數(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,通過(guò)對(duì)象指針訪問(wèn)對(duì)象數(shù)組,使程序以相反的順序顯示每個(gè)對(duì)象數(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)建一個(gè)類Stock,含字符數(shù)組stockcode[]及整型數(shù)組成員quan、雙精度型數(shù)據(jù)成員price.構(gòu)造函數(shù)含3個(gè)參數(shù):字符數(shù)組na[]及q、p.當(dāng)定義Stock的類對(duì)象時(shí),將對(duì)象的第一個(gè)字符串參數(shù)賦給數(shù)據(jù)成員stockcode,第2和第3個(gè)參數(shù)分別賦給quan、price.未設(shè)置第2和第3個(gè)參數(shù)時(shí),quan的值為1000,price的值為8.98.成員函數(shù)print沒(méi)有形參,需使用this指針,顯示對(duì)象數(shù)據(jù)成員的內(nèi)容.編寫程序顯示對(duì)象數(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編寫一個(gè)程序,已有若干學(xué)生的數(shù)據(jù),包括學(xué)號(hào)、姓名、成績(jī),要求輸出這些學(xué)生的數(shù)據(jù)并計(jì)算出學(xué)生人數(shù)和平均成績(jī)〔要求將學(xué)生人數(shù)和總成績(jī)用靜態(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é)號(hào):"<<studentNo<<endl;cout<<"成績(jī):"<<score<<endl;}voidstudent::showTotal<>{cout<<"總?cè)藬?shù):"<<sum<<endl;cout<<"平均成績(jī):"<<<double>totalScore/sum<<endl;}intstudent::sum=0;intstudent::totalScore=0;intmain<>{students1<"張無(wú)忌","111254",75>;students2<"李莫愁","254114",60>;students3<"小龍女","112587",88>;s1.show<>;s2.show<>;s3.show<>;student::showTotal<>;return0;}4.1有哪幾種繼承方式?每種方式的派生類對(duì)基類成員的繼承性如何?
公有繼承,私有繼承和保護(hù)繼承.
基類的私有成員,無(wú)論哪種繼承方式都不能訪問(wèn).
公有繼承不改變基類的公有和保護(hù)成員的訪問(wèn)限制.
私有繼承將基類的公有和保護(hù)成員都變成私有.
保護(hù)繼承將基類的公有和保護(hù)成員都變成保護(hù).4.2派生類能否直接訪問(wèn)基類的私有成員?若否,應(yīng)如何實(shí)現(xiàn)?
不能.可以在基類里添加一個(gè)公有成員函數(shù)來(lái)訪問(wèn)私有成員,派生類就能繼承這個(gè)公有成員函數(shù),實(shí)現(xiàn)對(duì)基類私有成員的訪問(wèn).4.3保護(hù)成員有哪些特性?保護(hù)成員以公有方式或私有方式繼承后的訪問(wèn)特性如何?
保護(hù)成員只能被本類或本類的派生類所訪問(wèn),在類或派生類外是不能被訪問(wèn)的.
后面一問(wèn)見(jiàn)第一題的答案.4.4派生類構(gòu)造函數(shù)和析構(gòu)函數(shù)的執(zhí)行順序是怎樣的?
構(gòu)造函數(shù)是先執(zhí)行父類的構(gòu)造函數(shù),再執(zhí)行類中其他類對(duì)象的構(gòu)造函數(shù),再執(zhí)行本類的構(gòu)造函數(shù).如果同級(jí)有多個(gè)構(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ù)成員的初始化語(yǔ)句}派生類中的析構(gòu)函數(shù)與基類無(wú)關(guān).4.6什么是多繼承?多繼承時(shí),構(gòu)造函數(shù)與析構(gòu)函數(shù)的執(zhí)行順序是怎樣的?
多繼承是指一個(gè)類同時(shí)繼承自多個(gè)不同的基類.
執(zhí)行順序同4.44.7在類的派生中為何要引入虛基類?虛基類構(gòu)造函數(shù)的調(diào)用順序是如何規(guī)定的?
如果一個(gè)類有多個(gè)直接基類,而這些直接基類又有一個(gè)共同的基類,則在最底層的派生類中會(huì)保留這個(gè)簡(jiǎn)介的共同基類數(shù)據(jù)成員的多份同名成員.在訪問(wèn)這些同名成員的時(shí)候,會(huì)產(chǎn)生二義性.為了解決二義性,引入了虛基類.1>
如果虛基類中定義有帶形參的構(gòu)造函數(shù),并且沒(méi)有定義默認(rèn)形式的構(gòu)造函數(shù),則整個(gè)繼承結(jié)構(gòu)中,所有直接或間接的派生類都必須在構(gòu)造函數(shù)的成員初始化表中列出對(duì)虛基類構(gòu)造函數(shù)的調(diào)用,以初始化在虛基類中定義的數(shù)據(jù)成員.2>
建立一個(gè)對(duì)象時(shí),如果這個(gè)對(duì)象中含有從虛基類繼承來(lái)的成員,則虛基類的成員是由最遠(yuǎn)派生類的構(gòu)造函數(shù)通過(guò)調(diào)用虛基類的構(gòu)造函數(shù)進(jìn)行初始化的.該派生類的其他基類對(duì)虛基類構(gòu)造函數(shù)的調(diào)用都自動(dòng)被忽略.3>
若同一層次中同時(shí)包含虛基類和非虛基類,應(yīng)先調(diào)用虛基類的構(gòu)造函數(shù),再調(diào)用非虛基類的構(gòu)造函數(shù),最后調(diào)用派生類的構(gòu)造函數(shù).4.8-4.11ACCB4.12
ConstructorB1.
ConstructorB2.
ConstructorA.
3
2
14.13
主食=bread
副食=steak4.14
0,0,0
0,1,0
3,6,94.15
ConstructorB1.
ConstructorB2.
ConstructorB3.
ConstructorA.
1
2
4,34.16
44.17<1,2>5,6<6,9>4.18
classbase1
classbase2
classlevel2
classbase2
classlevel1
classtoplevel4.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',"ASCIIvaluechar">;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<<"出生時(shí)間:"<<hours<<"時(shí)"<<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<<"編號(hào):"<<number<<"姓名:"<<name;}};classstudent:publicperson{private:intclassNumber,score;public:student<charnum[],charna[],intcNumber,intsc>:person<num,na>{classNumber=cNumber;score=sc;}voidshow<>{showName<>;cout<<"班號(hào):"<<classNumber<<"成績(jī):"<<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í)題什么是靜態(tài)聯(lián)編?什么是動(dòng)態(tài)聯(lián)編?
靜態(tài)聯(lián)編是指系統(tǒng)在編譯時(shí)就決定如何實(shí)現(xiàn)某一動(dòng)作.
動(dòng)態(tài)聯(lián)編是指系統(tǒng)在運(yùn)行時(shí)動(dòng)態(tài)實(shí)現(xiàn)某一動(dòng)作.編譯時(shí)的多態(tài)性與運(yùn)行時(shí)的多態(tài)性有什么區(qū)別?他們的實(shí)現(xiàn)方式有什么不同?靜態(tài)聯(lián)編支持的多態(tài)性稱為編譯時(shí)多態(tài)性,也稱靜態(tài)多態(tài)性.編譯時(shí)多態(tài)性是通過(guò)函數(shù)重載和模板實(shí)現(xiàn)的.動(dòng)態(tài)聯(lián)編所支持的多態(tài)性稱為運(yùn)行時(shí)多態(tài)性,也稱動(dòng)態(tài)多態(tài)性.是通過(guò)虛函數(shù)來(lái)實(shí)現(xiàn)的.簡(jiǎn)述運(yùn)算符重載規(guī)則.a>
C++中絕大部分的運(yùn)算符允許重載.b>
C++只能對(duì)已有的C++運(yùn)算符進(jìn)行重載.c>
運(yùn)算符重載是針對(duì)新類型數(shù)據(jù)的實(shí)際需要,對(duì)原有運(yùn)算符進(jìn)行適當(dāng)?shù)母脑焱瓿?應(yīng)與原有的功能相類似.d>
重載不能改變運(yùn)算符的操作對(duì)象的個(gè)數(shù).e>
重載不能改變運(yùn)算符原有的優(yōu)先級(jí).f>
不能改變?cè)械慕Y(jié)合特性.g>
參數(shù)至少應(yīng)有一個(gè)是類對(duì)象.h>
重載函數(shù)可以是普通函數(shù),也可以是類的成員函數(shù),也可以是類的友元函數(shù).i>
一般用于類對(duì)象的運(yùn)算符除了賦值運(yùn)算符都要重載.友元運(yùn)算符函數(shù)和成員運(yùn)算符函數(shù)有什么不同?a>
對(duì)于雙目運(yùn)算符,成員運(yùn)算符重載含有一個(gè)參數(shù),友元重載含有兩個(gè)參數(shù);對(duì)于單目運(yùn)算符,成員重載沒(méi)有參數(shù),友元重載有一個(gè)參數(shù).b>
雙目運(yùn)算符一般可以被重載為友元或成員.但是如果將一個(gè)對(duì)象和一個(gè)普通類型運(yùn)算,必須重載為友元.c>
調(diào)用方式不同.d>
一般,雙目運(yùn)算符用友元,單目運(yùn)算符用成員.如果操作數(shù)有隱式類型轉(zhuǎn)換,則必須用友元.什么是虛函數(shù)?虛函數(shù)與函數(shù)重載有哪些相同點(diǎn)與不同點(diǎn)?虛函數(shù)就是在基類中被關(guān)鍵字virtual說(shuō)明,并在派生類中重新定義的函數(shù).函數(shù)名都相同.重載函數(shù)的參數(shù)個(gè)數(shù)或參數(shù)類型必須有所不同.虛函數(shù)要求函數(shù)名,返回類型,參數(shù)個(gè)數(shù),參數(shù)的類型和順序與基類中的虛函數(shù)原型完全相同.什么是純虛函數(shù)?什么是抽象類?純虛函數(shù)是一個(gè)在基類中說(shuō)明的虛函數(shù),它在該基類中沒(méi)有定義,但要求在它的派生類中根據(jù)需要對(duì)它進(jìn)行定義,或仍說(shuō)明為純虛函數(shù).如果一個(gè)類至少有一個(gè)純虛函數(shù),那么就稱這個(gè)類為抽象類.7-12DAADCC13.
不對(duì),參數(shù)個(gè)數(shù)必須一樣.14.7615.Thisisc++book.第一個(gè)字符:T第16個(gè)字符:.第26個(gè)字符:數(shù)組下標(biāo)超界!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為邊長(zhǎng),d為0.public:Container<doublea,doubleb=0>{r=a;d=b;}virtualdoubleserface<>=0;//計(jì)算表面積virtualdoublevolume<>=0;//計(jì)算體積};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)對(duì)數(shù)據(jù)類型進(jìn)行嚴(yán)格的檢查,凡是類型不正確的數(shù)據(jù)都不可能通過(guò)編譯.
C++中需要定義眾多的用戶自定義類型且能夠輸入輸出.7.2C++有哪4個(gè)預(yù)定義的流對(duì)象?他們分別與什么具體設(shè)備相關(guān)聯(lián)?
標(biāo)準(zhǔn)輸入流對(duì)象cin、標(biāo)準(zhǔn)輸出流對(duì)象cout、非緩沖型的標(biāo)準(zhǔn)出錯(cuò)流對(duì)象cerr和緩沖型的標(biāo)準(zhǔn)出錯(cuò)流對(duì)象clog.
cin對(duì)應(yīng)標(biāo)準(zhǔn)輸入設(shè)備
cout對(duì)應(yīng)標(biāo)準(zhǔn)輸出設(shè)備
cerr對(duì)應(yīng)標(biāo)準(zhǔn)錯(cuò)誤輸出設(shè)備
clog對(duì)應(yīng)標(biāo)準(zhǔn)錯(cuò)誤輸出設(shè)備7.3.cerr和clog間的區(qū)別是?
cerr不經(jīng)過(guò)緩沖區(qū)直接顯示錯(cuò)誤信息.而clog存放在緩沖區(qū),緩沖區(qū)滿或遇上endl時(shí)再輸出.7.4C++提供哪兩種控制輸入輸出格式的方法?
一種是使用ios類中的有關(guān)格式控制的流成員函數(shù)進(jìn)行格式控制,另一種是使用稱為操縱符的特殊類型的函數(shù)控制.7.5C++進(jìn)行文件輸入輸出的基本過(guò)程是什么?
首先創(chuàng)建一個(gè)流對(duì)象,然后將這個(gè)流對(duì)象與文件相關(guān)聯(lián),即打開(kāi)文件,此時(shí)才能進(jìn)行讀寫操作,讀寫操作完成后再關(guān)閉這個(gè)文件.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<<"請(qǐng)輸入一個(gè)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++>{fo
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 當(dāng)前高校改革面臨的挑戰(zhàn)
- 新目標(biāo)七年級(jí)英語(yǔ)復(fù)習(xí) 單詞音標(biāo)練習(xí)
- 校醫(yī)聘用合同范本
- 工程合同抵押貸款合同范本
- 2025江蘇蘇州獅山商務(wù)創(chuàng)新發(fā)展集團(tuán)有限公司及下屬板塊公司招聘10人筆試參考題庫(kù)附帶答案詳解
- Maytansine-derivative-M24-生命科學(xué)試劑-MCE
- Enzyme-IN-3-disodium-生命科學(xué)試劑-MCE
- 科技短視頻創(chuàng)新技術(shù)傳播策略
- 電子俱樂(lè)部合同范本
- 東莞廣東東莞市自然資源局黃江分局自主(公開(kāi))招聘聘用人員筆試歷年參考題庫(kù)附帶答案詳解
- 防災(zāi)減災(zāi)工程學(xué)第六章火災(zāi)害課件
- DB11 938-2022 綠色建筑設(shè)計(jì)標(biāo)準(zhǔn)
- 部編版語(yǔ)文八年級(jí)下冊(cè)第六單元名著導(dǎo)讀《鋼鐵是怎樣煉成的》問(wèn)答題 (含答案)
- 2022譯林版新教材高一英語(yǔ)必修二單詞表及默寫表
- 全國(guó)青少年機(jī)器人技術(shù)等級(jí)考試:二級(jí)培訓(xùn)全套課件
- 九種中醫(yī)體質(zhì)辨識(shí)概述課件
- 小學(xué)數(shù)學(xué)計(jì)算能力大賽實(shí)施方案
- 古詩(shī)詞誦讀《虞美人》課件-統(tǒng)編版高中語(yǔ)文必修上冊(cè)
- 文物學(xué)概論-中國(guó)古代青銅器(上)
- 制作拉線課件
- 某物業(yè)公司能力素質(zhì)模型庫(kù)(參考)
評(píng)論
0/150
提交評(píng)論