C++第四版習題解答下_第1頁
C++第四版習題解答下_第2頁
C++第四版習題解答下_第3頁
C++第四版習題解答下_第4頁
C++第四版習題解答下_第5頁
已閱讀5頁,還剩49頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

《C++程序設計基礎》(第4版)(下)習題與解答第6章類與對象6.1選擇題?若有以下說明,則在類外使用對象 objX成員的正確語句是(C)。classX{inta;\f' \A||voidfun1();public:voidfun2();};XobjX;objX.a=0;(B)objX.fun1(); (C)objX.fun2(); (D)X::fun1();?若有以下說明,則對n的正確訪問語句是(B)。classY{■■i■ ■. ■■■.//…;public:staticintn;};intY::n;YobjY;n=1; (B)Y::n=1; (C)objY::n=1; (D)Y「>n3.若有以下類Z說明,則函數(shù)fStatic中訪問數(shù)據(jù)a錯誤的是(C)。classZ{staticinta;public:staticvoidfStatic(Z&);};intZ::a=0;ZobjZ;voidZ::fStatic(){objZ.a=1;}

voidZ::fStatic(){a=1;}voidZ::fStatic(){this-a=0;}voidZ::fStatic(){Z::a=0;}4?若有以下類W說明,則函數(shù)fConst的正確定義是(A)classW{inta;public:voidfConst(int&)const;};voidW::fConst(int&k)const{k=a;}voidW::fConst(int&k)const{k=a++;}voidW::fConst(int&k)const{cin>>a;}voidW::fConst(int&k)const{a=k;}5?若有以下類T說明,則函數(shù)fFriend的錯誤定義是(C)classT{inti;friendvoidfFriend(T&,int);};voidfFriend(T&objT,intk){objT.i=k;}voidfFriend(T&objT,intk){k=objT.i;}voidT::fFriend(T&objT,intk){k+=objT.i;}C)。C)。private或protected的類成員public或private的類成員(B)定義一個類后,this指針就指向該類(D)靜態(tài)成員函數(shù)擁有 this指針B);撤銷對象時,系統(tǒng)自動調用( C)o(C)析構函數(shù) (D)友元函數(shù)(B)構造函數(shù)可以重載(D)構造函數(shù)可以設置默認參數(shù)6?在類定義的外部,可以被訪問的成員有((A)所有類成員 (B)(C)public的類成員 (D)7?關于this指針的說法正確的是(C)。(A)this指針必須顯式說明(C)成員函數(shù)擁有this指針8?說明一個類的對象時,系統(tǒng)自動調用((A)成員函數(shù)(B)構造函數(shù)9?下面對構造函數(shù)的不正確描述是( C)(A)用戶定義的構造函數(shù)不是必須的(C)構造函數(shù)可以有參數(shù),也可以有返回值10.下面對析構函數(shù)的正確描述是(C)。(B)用戶必須定義類的析構函數(shù)(B)用戶必須定義類的析構函數(shù)(D)析構函數(shù)可以設置默認參數(shù)D)o(C)析構函數(shù)沒有參數(shù),也沒有返回值11?關于類的靜態(tài)成員的不正確描述是((A)靜態(tài)成員不屬于對象,是類的共享成員(B)靜態(tài)數(shù)據(jù)成員要在類外定義和初始化this指針,需要通過類參數(shù)訪問對象成員this指針,需要通過類參數(shù)訪問對象成員只有靜態(tài)成員函數(shù)可以操作靜態(tài)數(shù)據(jù)成員12.在下列選項中,(C)不是類的成員函數(shù)。(C)友元函數(shù)(D)復制構造函(A(C)友元函數(shù)(D)復制構造函數(shù)下面對友元的錯誤描述是(D)。關鍵字friend用于聲明友元一個類中的成員函數(shù)可以是另一個類的友元友元函數(shù)訪問對象的成員不受訪問特性影響友元函數(shù)通過this指針訪問對象成員若classB中定義了一個classA的類成員Aa,則關于類成員的正確描述是( C)在類B的成員函數(shù)中可以訪問 A類的私有數(shù)據(jù)成員在類B的成員函數(shù)中可以訪問 A類的保護數(shù)據(jù)成員類B的構造函數(shù)可以調用類 A的構造函數(shù)做數(shù)據(jù)成員初始化類A的構造函數(shù)可以調用類B的構造函數(shù)做數(shù)據(jù)成員初始化6.2閱讀下列程序,寫出運行結果i.#include<iostream>usingnamespacestd;classA{public:intf1();intf2();voidsetx(intm){x=m;cout<<xvvendl;}voidsety(intn){y=n;cout<vyv<endl;}intgetx(){returnx;}intgety(){returny;}-/1,i-j、j.,1private:■■Iintx,y;};intA::f1(){returnx+y;}intA::f2(){returnx-y;}intmain(){Aa;a.setx(10);a.sety(5);cout<va.getx()vv'\t'vva.gety()vvendl;cout<va.f1()vv'\t'vva.f2()vvendl;}【解答】10510 52.#include<iostream>usingnamespacestd;classT{public:T(intx,inty){a=x;b=y;cout?"調用構造函數(shù) 1."<<endl;cout<<a<<'\t'<<b<<endl;}T(T&d){cout?"調用構造函數(shù)2."<<endl;cout<vd.avv'\t'vvd.bvvendl;}~T(){cout<<"調用析構函數(shù)."<<endl;}intadd(intx,inty=1O){returnx+y;}private:inta,b;};intmain(){Td1(4,8);Td2(d1);cout<<d2.add(10)<<endl;}【解答】調用構造函數(shù)1.48調用構造函數(shù)2.4820調用析構函數(shù).調用析構函數(shù).3.#include<iostream>usingnamespacestd;classT{public:T(intx){a=x;b+=x;};staticvoiddisplay(Tc){coutvv"a="v<c.avv'\t'vv"b="vvc.bvvendl;}private:inta;staticintb;};intT::b=5;intmain(){TA(3),B(5);T::display(A);T::display(B);}【解答】a=3b=13a=5b=134.#include<iostream>usingnamespacestd;#include<cmath>classPoint{public:.「kJPoint(floatx,floaty){a=x;b=y;cout<<"點("<<a<<","<<b<<")";}frienddoubled(Point&A,Point&B){returnsqrt((A.a-B.a) (A.a-B.a)+(A.b-B.b) (A.b-B.b));}private:doublea,b;};intmain(){Pointp1(2,3);?. \ iCOut?"到";Pointp2(4,5);cout?"的距離是:"<<d(p1,p2)vvendl;}【解答】點(3,4)到點(4,5)的距離是:2.828435.#include<iostream>usingnamespacestd;classA{public:A(){a=5;}voidprinta(){cout<v"A:a="v<avvendl;}private:inta;friendclassB;};classB{public:voiddisplay1(At){t.a++;cout<v"display1:a="vvt.avvendl;};voiddisplay2(At){t.a--;cout<v"display2:a="vvt.avvendl;};};intmain(){Aobj1;Bobj2;obj1.printa();obj2.display1(obj1);obj2.display2(obj1);obj1.printa();}【解答】A:a=5display1:a=6display2:a=4A:a=56.#include<iostream>usingnamespacestd;classA{public:A(intx):a(x=0){}voidgetA(int&A){A=a;}voidprintA(){cout<v"a="vva<vendl;}private:inta;I};classB{public:B(intx,inty):aa(x=O){b=y;}voidgetAB(int&A,int&outB){aa.getA(A);outB=b;}voidprintAB(){aa.printA();cout<<"b="<<b<<endl;}private:Aaa;intb;};intmain(){AobjA;intm=5;objA.getA(m);cout<v"objA.a="vvmvvendl;cout<<"objB:\n";BobjB;objB.getAB(12,56);objB.printAB();}【解答】objA:a=5objB:a=12b=566.3思考題,?■-[_i \\yi l一一”I1.結構與類有什么區(qū)別?如果把程序中定義結構的關鍵字 struct直接改成class,會有什么問題?用教材中的一個例程試試看,想一想做什么修改能使程序正確運行?【解答】結構是數(shù)據(jù)的封裝,類是數(shù)據(jù)和操作的封裝。可以把結構看成是類的特例。 結構和類都可以用關鍵字struct或class定義。區(qū)別是,struct定義的結構或類的全部成員都是公有的,用 class定義的結構或類不做聲明的成員是私有的。若把struct改成class,只需要把全部成員定義為 public就可以了。2?有說明:classAXJI\\ 產/{inta;doublex;public:funMember();};Aa1,a2,a3;編譯器為對象a1、a2和a3開辟了什么內存空間?它們有各自的 funMember函數(shù)的副本嗎? C++通過什么機制調用類的成員函數(shù)?【解答】開辟的存儲空間有a1.a,a1.x,a2.a,a2.x,a3.a,a3.x。各對象沒有funMember函數(shù)的副本, C++通過this指針調用成員函數(shù)。3.C++提供了系統(tǒng)版本的構造函數(shù),為什么還需要用戶自定義構造函數(shù)?編寫一個驗證程序,說明自定義構造函數(shù)的必要性?!窘獯稹款惖哪J構造函數(shù)可以建立基本類型數(shù)據(jù)成員的存儲空間。 基于以下兩個原因, 需要用戶定義構造函數(shù):(1對數(shù)據(jù)成員的值做指定初始化;(2)類的數(shù)據(jù)是由指針管理的堆。程序略。4?試從定義方式、訪問方式、存儲性質和作用域 4個方面來分析類的一般數(shù)據(jù)成員和靜態(tài)數(shù)據(jù)成員的區(qū)別,并編寫一個簡單程序驗證它?!窘獯稹慷x方式訪問方式存儲性質作用域一般數(shù)據(jù)成員類中定義對象.數(shù)據(jù)成員局部數(shù)據(jù)由訪 問屬性靜態(tài)數(shù)據(jù)成員類中聲明,類外定義對象.數(shù)據(jù)成員類::數(shù)據(jù)成員全局數(shù)據(jù)public,protected,private決定程序略。5?試從定義方式、調用方式兩個方面來分析常成員函數(shù)、靜態(tài)成員函數(shù)和友元函數(shù)的區(qū)別??疾炖?-15,若classGoods的指針域:Goods“next;被聲明為私有(private)成員,程序會岀現(xiàn)什么錯誤?做什么最小修改能使程序正確運行?【解答】定義方式調用方式常成員函數(shù)函數(shù)原型以const做后綴this指針被約束為指向常量的常指針與一般成員函數(shù)調用形式相同對數(shù)據(jù)成員只讀靜態(tài)成員函數(shù)以static做函數(shù)原型前綴沒有this指針通過類或對象調用用于操作靜態(tài)數(shù)據(jù)成員友員函數(shù)以friend做函數(shù)原型前綴沒有this指針通過參數(shù)訪問對象可以訪問對象的不同屬性的成員在例6-15中,若把next聲明為私有數(shù)據(jù)成員,只須把有關指針操作的函數(shù)定義為友員函數(shù)就可以了:friendvoidpurchase(Goods*&f,Goods*&r,intw);friendvoidsale(Goods*&f,Goods*&r);6?設有:classM{kV.Iv1public:inta;};classNI{public:Mm;intb;voidfun(){/:…};intmain(){Nn;N”p=&n;/:■???:■■/}描述在N::fun中如何訪問M類的數(shù)據(jù)成員a?在main函數(shù)中又如何訪問對象 n的全部數(shù)據(jù)成員?【解答】在N::fun中訪問M類的數(shù)據(jù)成員a的形式是: m.a在main函數(shù)中訪問M類的數(shù)據(jù)成員的形式是: n.b,n.m.a6.4編程題1?定義一個Book(圖書)類,在該類定義中包括以下數(shù)據(jù)成員和成員函數(shù)。數(shù)據(jù)成員:bookname(書名)、price(價格)和number(存書數(shù)量)。成員函數(shù):display。顯示圖書的情況;borrow()將存書數(shù)量減1,并顯示當前存書數(shù)量;restore。將存書數(shù)量加1,并顯示當前存書數(shù)量。在main函數(shù)中,要求創(chuàng)建某一種圖書對象, 并對該圖書進行簡單的顯示、 借閱和歸還管理?!窘獯稹?include<iostream>usingnamespacestd;classBook\孑' \\II{public:voidsetBook(char*,double,int);voidborrow();voidrestore();voiddisplay();private:charbookname[40];doubleprice;intnumber;};〃在類外定義Book類的成員函數(shù)voidBook::setBook(char*name,doublepri,intnum){strcpy(bookname,name);price=pri;number=num;}voidBook::borrow(){if(number==0){cout<<"已沒存書,退岀!"<<endl;abort();}number=number-1;coutvv"借一次,現(xiàn)存書量為: "<<numbervvendl;}voidBook::restore(){number=number+1;coutvv"還一次,現(xiàn)存書量為: "vvnumbervvendl;}voidBook::display(){coutvv"存書情況:"<<endl<<"bookname:"vvbooknamevvendlvv"price:"vvpricevvendlvv"number:"vvnumbervvendl;}intmain(){charflag,ch;Bookcomputer;computer.setBook("c++程序設計基礎",32,1000);computer.display();ch='y';while(ch=='y'){coutvv"請輸入借閱或歸還標志 (b/r):";cin>>flag;switch(flag){case'b':computer.borrow();break;x.|case'r':computer.restore();}coutvv"是否繼續(xù)?(y/n)";cin>>ch;}Icomputer.display();}?定義一個Box(盒子)類,在該類定義中包括以下數(shù)據(jù)成員和成員函數(shù)。數(shù)據(jù)成員:length(長)、width(寬)和height(高)。成員函數(shù):構造函數(shù) Box,設置盒子的長、寬和高3個初始數(shù)據(jù);成員函數(shù)setBox對數(shù)據(jù)成員置值;成員函數(shù) volume計算盒子的體積。在main函數(shù)中,要求創(chuàng)建Box對象,輸入長、寬、高,輸岀盒子的體積?!窘獯稹?includeviostream>usingnamespacestd;classBOX{public:BOX(doublel,doublew,doubleh){length=l;width=w;height=h;}voidvolume(){cout<v"volume="v<length*width*height<<endl;}private:doublelength,width,height;};intmain(){BOXbox1(1,3,5);box1.volume();BOXbox2(2,4,6);box2.volume();}定義一個Student類,在該類定義中包括:一個數(shù)據(jù)成員(分數(shù) score)及兩個靜態(tài)數(shù)據(jù)成員(總分total和學生人數(shù)count);成員函數(shù)scoretotalcount(doubles)用于設置分數(shù)、求總分和累計學生人數(shù);靜態(tài)成員函數(shù) sum()用于返回總分;靜態(tài)成員函數(shù)average。用于求平均值。在main函數(shù)中,輸入某班同學的成績,并調用上述函數(shù)求全班學生的總分和平均分?!窘獯稹?include<iostream>usingnamespacestd;classstudent{( 、 yjfXpublic:voidscoretotalcount(doubles){score=s;total=total+score;count++;}staticdoublesum(){returntotal;}staticdoubleaverage(){returntotal/count;}private:doublescore;staticdoubletotal;staticdoublecount;};doublestudent::total=O;doublestudent::count=O;intmain(){inti,n;doubles;coutvv"請輸入學生人數(shù):";cin?n;studentstu;for(i=1;i<=n;i++){coutvv"請輸入第"vvivv"個學生的分數(shù):";cin>>s;stu.scoretotalcount(s);}coutvv"總分:"vvstudent::sum()<<endl;coutvv"平均分:"vvstudent::average()v<endl;}定義一個表示點的結構類型 Point和一個由直線方程 y=ax+b確定的直線類Line。結構類型Point有兩個成員x和y,分別表示點的橫坐標和縱坐標。 Line類有兩個數(shù)據(jù)成員 a和b,分別表示直線方程中的系數(shù)。 Line類有一個成員函數(shù) print用于顯示直線方程。友元函數(shù)setPoint(Line&11丄ine&12)用于求兩條直線的交點。在 main函數(shù)中,建立兩個直線對象,分別調用print函數(shù)顯示兩條直線的方程,并調用函數(shù) setPoint求這兩條直線的交點?!窘獯稹?includeviostream>usingnamespacestd;x.|structpoint{doublex;doubley;};classlineII{public:line(doubleu,doublev){a=u;b=v;}voidprint(){coutvv"y="vvavv"x+"vvbvvendl;}friendpointsetpoint(line&l1,line&l2);

private:doublea,b;};pointsetpoint(line&l1,line&12){pointp;p.x=(l2.b-l1.b)/(l1.a-l2.a);p.y=(l1.a*l2.b-l2.a*l1.b)/(l1.a-l2.a);returnp;}intmain(){pointsetp;linel1(2,3),l2(4,5);cout?"直線l1:";print();cout?"直線l2:";print();setp=setpoint(l1,l2);cout?"直線l1和直線l2的交點:("vvsetp.xvv","vvsetp.yvv")"v<endl;}用類成員結構修改習題6.4第4小題的程序,使其實現(xiàn)相同的功能。定義Point類和Line類,表示點和線;定義setPoint類,包含兩個Line類成員和一個表示直線交點的 Point成員,并定義類中求直線交點的成員函數(shù)。編寫每個類相應的成員函數(shù)和測試用的主函數(shù)。【解答】略。廠、£\傘飛第7章運算符重載7.1選擇題1?在下列運算符中,不能重載的是( B)。! (B)sizeof (C)new (D)delete2?在下列關于運算符重載的描述中, (D)是正確的(A)可以改變參與運算的操作數(shù)個數(shù)(A)可以改變參與運算的操作數(shù)個數(shù)可以改變運算符原來的優(yōu)先級(A)成員函數(shù) (B)構造函數(shù)(C)普通函數(shù)(D)友元函數(shù)4?要求用成員函數(shù)重載的運算符是( A)。(A)=(B)==(C)<=(D)++5?要求用友元函數(shù)重載的ostream類輸岀運算符是(C)。(A)=(B)[](C)<<(D)()(C)可以改變運算符原來的結合性(D)不能改變原運算符的語義3?在下列函數(shù)中,不能重載運算符的函數(shù)是( B)任何形式的構造函數(shù)都可以實現(xiàn)數(shù)據(jù)類型轉換。帶非默認參數(shù)的構造函數(shù)可以把基本類型數(shù)據(jù)轉換成類類型對象。類型轉換函數(shù)可以把類類型對象轉換為其他指定類型對象。(D)類型轉換函數(shù)只能定義為一個類的成員函數(shù),不能定義為類的友元函數(shù)。7.2閱讀下列程序,寫出運行結果1.#include<iostream>usingnamespacestd;classT{public:T(){a=O;b=O;c=O;}T(inti,intj,intk){a=i;b=j;c=k;}voidget(int&i,int&j,int&k){i=a;j=b;k=c;}Toperator(Tobj);private:inta,b,c;};TT::operator(Tobj){Ttempobj;tempobj.a=aobj.a;tempobj.b=bobj.b;tempobj.c=c*obj.c;returntempobj;}intmain(){Tobj1(1,2,3),obj2(5,5,5),obj3;inta,b,c;obj3=obj1■obj2;obj3.get(a,b,c);cout<<"(obj1”obj2):"vv"a="vvavv'\t'vv"b="v<bvv'\t'vv"c="vvcvv'\n:(obj2obj3).get(a,b,c);cout<<"(obj2”obj3):"vv"a="vvavv'\t'vv"b="v<bvv'\t'vv"c="vvcvv'\n:}【解答】(obj1*obj2):a=5b=10 c=15(obj2*obj3):a=25b=50 c=752.#include<iostream>usingnamespacestd;classVector{public:Vector(){}Vector(inti,intj){x=i;y=j;}friendVectoroperator+(Vectorv1,Vectorv2){VectortempVector;tempVector.x=v1.x+v2.x;tempVector.y=v1.y+v2.y;returntempVector;}voiddisplay(){coutvv"("vvxvv","vvyvv")"vvendl;}private:intx,y;};intmain(){Vectorv1(1,2),v2(3,4),v3;cout<<"v1=";v1.display();cout?"v2=";v2.display();v3=v1+v2;cout<<"v3=v1+v2=";x.|v3.display();}【解答】■■. I.■v1=(1,2)v2=(3,4)v3=v1+v2=(4,6)7.3思考題1?一個運算符重載函數(shù)被定義為成員函數(shù)或友元函數(shù)后,在定義方式、解釋方式和調用方式上有何區(qū)別?可能會岀現(xiàn)什么問題?請用一個實例說明之?!窘獯稹恳远\算符為例。運算符重載定義解釋調用成員函數(shù)Obj&operatorop();Objoperatorop(object);Obj.operatorop()ObjL.operatorop(ObjR)Objop或opObjObjLopObjR左操作數(shù)通過this指針指定,右操作數(shù)由參數(shù)傳遞友員函數(shù)friendObj&operatorop(Obj&);friendObjoperatorop(Obj,Obj);operatorop(Obj)operatorop(ObjL,ObjR)Objop或opObjObjLopObjR操作數(shù)均由參數(shù)傳遞可能會岀現(xiàn)的問題:運算符的左右操作數(shù)不同,須用友員函數(shù)重載;當運算符的操作需要修改類對象狀態(tài)時,應用成員函數(shù)重載。友員函數(shù)不能重載運算符=()[]->必須要用友員函數(shù)重載的運算符 >><<程序略。2.類類型對象之間、類類型和基本類型對象之間用什么函數(shù)進行類型轉換?歸納進行類型轉換的構造函數(shù)和類型轉換函數(shù)的定義形式、調用形式和調用時機?!窘獯稹繕嬙旌瘮?shù)可以把基本類型、類類型數(shù)據(jù)轉換成類類型數(shù)據(jù); 類類型轉換函數(shù)可以在類類型和基本數(shù)據(jù)類型之間做數(shù)據(jù)轉換。定義形式調用形式調用時機構造函數(shù)ClassX::ClassX(arg,arg1=E1,...,argn=En);、A隱式調用 :/'?\||建立對象、參數(shù)傳遞時類類型轉換函數(shù)ClassX::operatorType();用類型符顯式調用;自動類型轉換時隱式調用需要做數(shù)據(jù)類型轉換時7.4編程題i?分別使用成員函數(shù)和友元函數(shù)編寫程序重載運算符 “+;'使該運算符能實現(xiàn)兩個字符串的連接。【解答】(1)使用成員函數(shù)#include<iostream>\.J =#include<cstring>_~—!usingnamespacestd;I}classs{public:s(){*str='\O';}s(char*pstr){strcpy(str,pstr);char*gets(){returnstr;}soperator+(sobj);private:charstr[10];};ss::operator+(sobj)strcat(str,obj.str);returnstr;//或return*this}intmain(){sobj1("Visual"),obj2("C++"),obj3;obj3=obj1+obj2;cout<<obj3.gets()vvendl;}(2)使用友員函數(shù)#include<iostream>#include<cstring>usingnamespacestd;classs{public:s(){*str='\O';}s(char*pstr){strcpy(str,pstr);}char*gets(){returnstr;}friendsoperator+(sobj1,sobj2);private:charstr[100];};soperator+(sobj1,sobj2){stempobj;strcat(tempobj.str,obj1.str);strcat(tempobj.str,obj2.str);returntempobj;X,I}intmain(){sobj1("Visual"),obj2("C++"),obj3;obj3=obj1+obj2;Icout<<obj3.gets()<<endl;}2?定義一個整數(shù)計算類 Integer,實現(xiàn)短整數(shù)+、-、“、/基本算術運算。要求:可以進行數(shù)據(jù)范圍檢查(£2768?32767,或自行設定),數(shù)據(jù)溢岀時顯示錯誤信息并中斷程序運行?!窘獯稹?include<iostream>usingnamespacestd;classInteger{private:shorta;public:Integer(shortn=0){a=n;}Integeroperator+(lnteger);Integeroperator-(Integer);Integeroperator*(Integer);Integeroperator/(Integer);Integeroperator=(Integer);voiddisplay(){coutvvavvendl;}};IntegerInteger::operato葉(Integerx){Integertemp;if(a+x.a<-32768||a+x.a>32767){cout<v"Dataoverflow!"v<endl;abort();}temp.a=a+x.a;returntemp;}IntegerInteger::operator-(Integerx){Integertemp;if(a-x.a<-32768||a-x.a>32767){cout<v"Dataoverflow!"v<endl;abort();}temp.a=a-x.a;returntemp;}IntegerInteger::operator*(Integerx){s.IIntegertemp;if(a*x.a<-32768||a*x.a>32767){cout<v"Dataoverflow!"v<endl;abort();}temp.a=a*x.a;returntemp;I}IntegerInteger::operator/(lntegerx){Integertemp;if(a/x.a<-32768||a/x.a>32767){cout<v"Dataoverflow!"v<endl;abort();}temp.a=a/x.a;returntemp;}IntegerInteger::operator=(lntegerx)a=x.a;return*this;}intmain(){IntegerA(90),B(30),C;cout<v"A=";A.display();cout<v"B=";B.display();C=A+B;cout<v"C=A+B=";C.display();C=A-B;cout<<"C=A-B=";C.display();C=A*B;cout<v"C=A*B=";C.display();C=A/B;cout<v"C=A/B=";C.display();}3?定義一個實數(shù)計算類 Real,實現(xiàn)單精度浮點數(shù)+、-、“、I基本算術運算。要求:可以進行數(shù)據(jù)范圍(24為038?3.4為038,或自行設定)檢查,數(shù)據(jù)溢岀時顯示錯誤信息并中斷程序運行。【解答】#include<iostream>usingnamespacestd;classReal{private:doublea;-1-public:x.|Real(doubler=0){a=r;}Realoperator+(Real);Realoperator-(Real);Realoperator*(Real);Realoperator/(Real);IRealoperator=(Real);voiddisplay(){coutvvavvendl;}};RealReal::operator+(Realx){Realtemp;if(a+x.a<-1.7e308||a+x.a>1.7e308){cout<v"Dataoverflow!"v<endl;abort();}temp.a=a+x.a;returntemp;}RealReal::operator-(Realx){Realtemp;if(a-x.a<-1.7e308||a-x.a>1.7e308){cout<v"Dataoverflow!"v<endl;abort();}temp.a=a-x.a;returntemp;}RealReal::operator*(Realx){Realtemp;if(a*x.a<-1.7e308||a*x.a>1.7e308){cout<v"Dataoverflow!"v<endl;abort();}temp.a=a*x.a;returntemp;}RealReal::operator/(Realx){Realtemp;if(a/x.a<-1.7e308||a/x.a>1.7e308){coutvv"Dataoverflow!"vvendl;abort();}temp.a=a/x.a;returntemp;}RealReal::operator=(Realx){a=x.a;return*this;}intmain(){RealA(1.1),B(1.2),C;cout?"A=";A.display();cout?"B=";B.display();C=A+B;cout?"C=A+B=";C.display();C=A-B;cout<<"C=A-B=";C.display();C=A*B;cout<v"C=A*B=";C.display();C=A/B;cout?"C=A/B=";C.display();4?假設有向量X=(xi,X2,…,xn)和Y=(yi,y2,…,yn),它們之間的加、減和乘法分別定義為:X+Y=(xi+yi,X2+y2,…,Xn+yn)X-Y=(xi-yi,X2-y2,…,n「yn)XY=xi“yi+X2“y2+,…,+<n“yn編寫程序定義向量類 Vector,重載運算符 “+”二'、“”和“=”實現(xiàn)向量之間的加、減、乘、賦值運算;重載運算符 “>>'、“<<實現(xiàn)向量的輸入、輸出功能。注意檢測運算的合法性。【解答】#include<iostream>usingnamespacestd;classVector{private:double*v;intlen;public:Vector(intsize);Vector(double*,int);~Vector();double&operator[](inti);Vector&operator=(Vector&);friendVectoroperator+(Vector&,Vector&);friendVectoroperator-(Vector&,Vector&);frienddoubleoperator*(Vector&,Vector&);friendostream&operator?(ostream&output,Vector&);friendistream&operator>>(istream&input,Vector&);};Vector::Vector(intsize){{cout<v"Thesizeof"v<sizevv"isoverflow!\n";abort();}v=newdouble[size];for(inti=0;i<size;i++)v[i]=0;len=size;}Vector::Vector(double*C,intsize){{cout<v"Thesizeof"v<sizevv"isoverflow!\n"?endl;abort();}v=newdouble[size];len=size;for(inti=O;i<len;i++)v[i]=C[i];}Vector::~Vector(){delete[]v;v=NULL;len=0;}double&Vector::operator[](inti){if(i>=0&&i<len)returnv[i];else{cout<v"Thesizeof"vvivv"isoverflow!\n";abort();}}Vector&Vector::operator=(Vector&C){if(len==C.len){for(inti=0;i<len;i++)v[i]=C[i];return*this;}else{cout<<"Operator=fail!\n";abort();}sI}向量相加Vectoroperator+('Vector&A,Vector&B)〃向量相加{intsize=A.len;double*T=newdouble[size];Iif(size==B.len){for(inti=O;i<size;i++)T[i]=A[i]+B[i];returnVector(T,size);}else{cout<<"Operator+fail!\n";abort();}Vectoroperator-(Vector&A,Vector&B)〃 向量相減{intsize=A.len;double*T=newdouble[size];if(size==B.len){for(inti=O;i<size;i++)T[i]=A[i]-B[i];returnVector(T,size);}else{cout<<"Operator-fail!\n";abort();}}doubleoperator*(Vector&A,Vector&B)〃 向量相乘{,、I—\intsize=A.len;doubles=0;if(size==B.len){for(inti=O;i<size;i++)s+=A[i]*B[i];returns;}else{s.Icout<<"Operator*fail!\n";abort();}}ostream&operator?(ostream&output,Vector&A)〃 輸岀I{inti;output*'(:for(i=0;i<A.len-1;i++)output<<A[i]vv',:output<<A[i]<<')';returnoutput;}istream&operator?(istream&input,Vector&A)// 輸入{for(inti=0;i<A.len;i++)input?A[i];returninput;}intmain(){intk1,k2,k3;doublet;cout<<"lnputthelengthofVectorA:\n";cin>>k1;VectorA(k1);cout<<"InputtheelementsofVectorA:\n";cin?A;cout<<"InputthelengthofVectorB:\n";cin>>k2;VectorB(k2);cout<<"InputtheelementsofVectorB:\n";cin>>B;cout<<"InputthelengthofVectorC:\n";cin>>k3;VectorC(k3);cout<<"A="<<A<<endl;cout<<"B="<<B<<endl;C=A+B;coutvv"A+B="vvAvv"+"vvBvv"="v<Cvvendl;C=A-B;coutvv"A-B="vvAvv"-"vvBvv"="v<Cvvendl;t=A*B;coutvv"A*B="vvAvv"*"v<Bvv"="vvtvvendl;}x.|5.定義一個類nauticalmile_kilometer,它包含兩個數(shù)據(jù)成員 kilometer(千米)和meter(米);還包含一個構造函數(shù)對數(shù)據(jù)成員進行初始化; 成員函數(shù)print,用于輸岀數(shù)據(jù)成員 kilometer和meter的值;類型轉換函數(shù)operatordouble,實現(xiàn)把千米和米轉換為海里 (1海里=1.852千米)的功能。編寫main函數(shù),測試類nauticalmile_kilometer?!窘獯稹?include<iostream>usingnamespacestd;constdoublen=1.852;〃定義海里與千米和米的轉換系數(shù) (1海里=1.852千米)classnauticalmile_kilometer{public:nauticalmile_kilometer(intkm,doublem){kilometer=km;meter=m;}voidprint()

{coutvv"kilometer="vvkilometervv'\t'vv"meter="vvmeterv<endl;}operatordouble();private:intkilometer;doublemeter;};nauticalmile_kilometer::operatordouble(){return(meter/1000+double(kilometer))/n;}intmain(){nauticalmile_kilometerobj(100,50);obj.print();cout<<"nauticalmile="v<double(obj)v<endl;}6.定義一個集合類 setColour,要求元素為枚舉類型值。例如,enumcolour{red,yellow,blue,white,black};集合類實現(xiàn)交、并、差、屬于、蘊含、輸入、輸岀等各種基本運算。設計main函數(shù)測試類的功能?!窘獯稹棵杜e類型數(shù)據(jù)用序值參與運算。定義枚舉集合關鍵是對輸入 /輸出操作進行顯示轉換程序略。第8章繼承IX.|1=‘I 壬,\8.1選擇題?T人£ 、J、1?在C++中,類之間的繼承關系具有(C)。自反性(B)對稱性 (C)傳遞性 (D)反對稱性2?在下列關于類的繼承描述中,正確的是(D)。(A)派生類公有繼承基類時,可以訪問基類的所有數(shù)據(jù)成員,調用所有成員函數(shù)(B)派生類也是基類,所以它們是等價的派生類對象不會建立基類的私有數(shù)據(jù)成員,所以不能訪問基類的私有數(shù)據(jù)成員一個基類可以有多個派生類,一個派生類可以有多個基類3?當一個派生類公有繼承一個基類時,基類中的所有公有成員成為派生類的( Apublic成員 (B)private成員 (C)protected成員元當一個派生類私有繼承一個基類時,基類中的所有公有成員和保護成員成為派生類的setColour(D)友(B)(D)友public成員 (B)privatesetColour(D)友(B)(D)友當一個派生類保護繼承一個基類時, 基類中的所有公有成員和保護成員成為派生類的(A)public成員 (B)private成員 (C)protected成員元(C)(D)友(A)public成員(C)(D)友(A)public成員private成員(C)protected成員(D)所有成員7?在下列描述中,錯誤的是(D)o(A)在基類中定義的public成員在公有繼承的派生類中可見,也能在類外被訪問在基類中定義的 protected成員在私有繼承的派生類中可見在基類中定義的公有靜態(tài)成員在私有繼承的派生類中可見(D)訪問聲明可以在公有繼承派生類中把基類的(D)訪問聲明可以在公有繼承派生類中把基類的public成員聲明為private成員8?在C++中,可以被派生類繼承的函數(shù)是( A)o(D)友(A)成員函數(shù) (B)構造函數(shù) (C)(D)友元函數(shù)9.在創(chuàng)建派生類對象時,構造函數(shù)的執(zhí)行順序是( D)o對象成員構造函數(shù)-基類構造函數(shù)-派生類本身的構造函數(shù)派生類本身的構造函數(shù)-基類構造函數(shù)-對象成員構造函數(shù)基類構造函數(shù)-派生類本身的構造函數(shù)-對象成員構造函數(shù)基類構造函數(shù)-對象成員構造函數(shù)-派生類本身的構造函數(shù)10.當不同的類具有相同的間接基類時, (C)o各派生類無法按繼承路線產生自己的基類版本為了建立唯一的間接基類版本,應該聲明間接基類為虛基類為了建立唯一的間接基類版本,應該聲明派生類虛繼承基類(D)一旦聲明虛繼承,基類的性質就改變了,不能再定義新的派生類8.2閱讀下列程序,寫出運行結果■■II1.#include<iostream>usingnamespacestd;classBase{public:voidget(inti,intj,intk,intl){a=i;b=j;x=k;y=l;}voidprint(){coutvv"a="v<avv'\t'vv"b="vvbvv'\t'vv"x="vvxvv'\t'vv"y="vvyv<endl;}inta,b;protected:intx,y;};classA:publicBase{public:voidget(inti,intj,intk,intl){Baseobj3;obj3.get(50,60,70,80);obj3.print();a=i;b=j;x=k;y=l;u=a+b+obj3.a;v=y-x+obj3.b;}voidprint(){coutvv"a="v<avv'\t'vv"b="vvbvv'\t'V<"X="vvxvv'\t'vv"y="vvyvvendl;coutvv"u="v<uvv'\t'vv"v="vvvvvendl;}private:intu,v;};intmain(){Baseobj1;Aobj2;obj1.get(10,20,30,40);obj2.get(30,40,50,60);obj1.print();obj2.print();}【解答】a=50b=60x=70y=80a=10b=20x=30y=40a=30b=40x=50y=60u=120v=702.#include<iostream>usingnamespacestd;classBase1{public:Base1(inti):"<<i<<endl;}{coutvv"調用基類Base1:"<<i<<endl;}};classBase2{public:Base2(intj){cout?"調用基類Base2的構造函數(shù):"<<j<<endl;}};classA:publicBase1,publicBase2{public:A(inta,intb,intc,intd):Base2(b),Base1(c),b2(a),b1(d){cout?"調用派生類A的構造函數(shù):"vva+b+c+dvvendl;}private:Base1b1;Base2b2;};intmain(){Aobj(1,2,3,4);}【解答】調用基類BASE1的構造函數(shù):3調用基類BASE2的構造函數(shù):2調用基類BASE1的構造函數(shù):4調用基類BASE2構造函數(shù):1調用派生類A的構造函數(shù):103.#include<iostream>usingnamespacestd;classA{public:A(inti,intj){a=i;b=j;}voidAdd(intx,inty){a+=x;b+=y;}Voidshow(){coutvv"("v<avv")\t("vvbvv")\n";}private:Iinta,b;};classB:publicA{public:B(inti,intj,intm,intn):A(i,j),x(m),y(n){}voidshow(){coutvv"("v<xvv")\t("vvyvv")\n";}voidfun(){Add(3,5);}voidff(){A::show();}private:intx,y;};intmain(){Aa(1,2);show();Bb(3,4,5,6);fun();b.A::show();b.show();b.ff();}【解答】(1)(2)⑹(9)(5)(6)⑹(9)4.#include<iostream>usingnamespacestd;classA{public:A(constchars){cout<<s<<endl;}~A(){}};classB:virtualpublicA{public:B(constchar“s1,constchar■s2):A(s1){cout<<s2<<endl;}};classC:virtualpublicA{public:C(constchar*s1,constchar*s2):A(s1){cout<<s2vvendl;}};IclassD:publicB,publicC{public:D(constchars1,constchars2,constchar”s3,constchar”s4):B(s1,s2),C(s1,s3),A(s1){cout<<s4<<endl;}};intmain(){D■-ptr=newD("classA","classB","classC","classD");deleteptr;【解答】classAclassBclassCclassD8.3思考題i?函數(shù)和類這兩種程序模塊都可以實現(xiàn)軟件重用,它們之間有什么區(qū)別?【解答】函數(shù)是基于參數(shù)集的功能抽象模塊,以調用方式實現(xiàn)軟件重用,函數(shù)之間沒有邏輯關系。類是數(shù)據(jù)屬性與操作的封裝,以繼承方式實現(xiàn)軟件重用,類之間構成有向無回圖的類格。2.請按照類成員的訪問特性、 類層次的繼承特點,制作一張表格,總結各種類成員在基類、派生類中的可見性和作用域?!窘獯稹?■基類成員派生類繼承protected---\ J--■privatepublic在派生類中訪問特性不變。派生類和類外均可見,有作用域。在派生類中訪問特性不變。類體系中可見?;愃接谐蓡T,僅在protected成為派生類保護段成員。在整個類體系中可見?;愔锌梢?。private成為派生類私有成員。僅在派生類和基類中可見。派生類不論以何種方式繼承基類,基類所有成員在整個類體系有作用域。3?若有以下說明語句:classA{private:intal;public:inta2;doublex;/ /};classB:privateAprivate:intbl;publicintb2;doublex;I.1/''???:"/};Bb;對象b將會生成什么數(shù)據(jù)成員?與繼承關系、訪問特性、名字有關嗎?【解答】對象b生成的數(shù)據(jù)成員有a1a2A::xb1b2B::x,共六個數(shù)據(jù)成員。數(shù)據(jù)成員的建立和繼承關系、訪問特性、名字無關。4?若有以下說明語句:classA{/?????■■/public:voidsameFun();};classB:publicA{/ /public:voidsameFun();};voidcomFun(){Aa;Bb;/:■...?:■./}若在B::sameFun中調用A::sameFun,語句格式如何?它將在什么對象上操作?在comFun中可以用什么方式調用 A::sameFun和B::sameFun?語句格式如何?它們將可以在什么對象上操作?【解答】若要在B::sameFun中調用A::sameFun,語句形式應為:A::samefun(); 〃域作用符說明調用基類函數(shù)調用的A::samefun將在B類對象上進行操作。在comFun中調用B::sameFun和A::sameFun的方式有:A::sameFun(); //通過A類對象調用A::sameFun,在a類對象上操作。sameFun(); //通過B類對象調用B::sameFun,在b類對象上操作。b.A::sameFun(); //通過B類對象調用A::sameFun//在b類對象上(對由基類繼承下來的數(shù)據(jù)成員)操作。5?有人定義一個教師類派生一個學生類。 他認為姓名”和性別”是教師、學生共有的屬性,聲明為public,職稱”和工資”是教師特有的,聲明為private。在學生類中定義特有的屬性 班級'和成績”所以有:classteacher{public:charname[20];charsex;//-…private:chartitle[20];doublesalary;};classstudent:publicteacher{//…private:chargrade[20];intscore;};你認為這樣定義合適嗎?請給岀你認為合理的類結構定義?!窘獯稹坎缓线m,這樣導致數(shù)據(jù)冗余。合理的結構是提取它們共有的數(shù)據(jù)和操作定義一個基類, 然后分別定義teacher和student作為派生類。classperson{protected:charname[20];charsex;//……};classteacher:publicteache{〃……private:chartitle[20];doublesalary;};classstudent:publicteacher{//……private:chargrade[20];intscore;};6.在第6章的例6-21中,定義Student類包含了Date類成員??梢杂美^承方式把 Student類定義為Date類的派生類嗎?如何改寫程序?請你試一試?!窘獯稹靠梢杂美^承方式改寫。程序略。7.虛基類”是通過什么方式定義的?如果類A有派生類B、C,類A是類B虛基類,那么它也一定是類C的虛基類嗎?為什么?【解答】虛基類是在聲明派生類時,指定繼承方式時聲明的,聲明虛基類的一般形式為:class派生類名:virtual繼承方式基類名若類A是類B和類C的虛基類,但不一定是類D的虛基類,原因在于 虛基類”中的虛”不是基類本身的性質。而是派生類在繼承過程中的特性。關鍵字 virtual只是說明該派生類把基類當作虛基類繼承,不能說明基類其他派生類繼承基類的方式8?在具有虛繼承的類體系中,建立派生類對象時,以什么順序調用構造函數(shù)?請用簡單程序驗證你的分析?!窘獯稹吭诰哂刑摾^承的類體系中,建立派生類對象時先調用間接基類構造函數(shù),再按照派生類定義時各個直接基類繼承的順序調用直接基類的構造函數(shù),最后再對派生類對象自身構造函數(shù)。另外,C++為了保證虛基類構造函數(shù)只被建立對象的類執(zhí)行一次, 規(guī)定在創(chuàng)建對象的派生類構造函數(shù)中只調用虛基類的構造函數(shù)和進行 (執(zhí)行)自身的初始化。參數(shù)表中的其他調用被忽略,即直接基類的構造函數(shù)只調用系統(tǒng)自帶的版本, 或調用自定義版本但不對虛基類數(shù)據(jù)成員初始化。程序略。8.4編程題1.定義一個Rectangle類,它包含兩個數(shù)據(jù)成員 length和width,以及用于求長方形面積的成員函數(shù)。再定義 Rectangle的派生類Rectangular,它包含一個新數(shù)據(jù)成員 height和用來求長方體體積的成員函數(shù)。在 main函數(shù)中,使用兩個類,求某個長方形的面積和某個長方體的體積?!窘獯稹?include<iostream>usingnamespacestd;classrectangle{public:rectangle(doublel,doublew){length=l;width=w;}doublearea(){return(length*width);}doublegetlength(){returnlength;}doublegetwidth(){returnwidth;}private:doublelength;doublewidth;};classrectangular:publicrectangle{public:rectangular(doublel,doublew,doubleh):rectangle(l,w){height=h;}doublegetheight(){returnheight;}doublevolume(){returnarea()*height;}private:doubleheight;};x.|intmain(){rectangleobj1(2,8);rectangularobj2(3,4,5);cout<<"length="<<obj1.getlength()<<'\t'<<"width="<<obj1.getwidth()<<endl;Icout<<"rectanglearea="v<obj1.area()v<endl;cout<<"length="<<obj2.getlength()<<'\t'<<"width="<<obj2.getwidth();cout<v'\t'vv"height="vvobj2.getheight()vvendl;cout<<"rectangularvolume="v<obj2.volume()v<endl;}2?假設某銷售公司有一般員工、銷售員工和銷售經理。月工資的計算辦法是:一般員工月薪=基本工資;銷售員工月薪=基本工資+銷售額*提成率;銷售經理月薪=基本工資+職務工資+銷售額*提成率。編寫程序,定義一個表示一般員工的基類 Employee,它包含3個表示員工基本信息的數(shù)據(jù)成員:編號number、姓名name和基本工資basicSalary;由Employee類派生銷售員工 Salesman類,Salesman類包含2個新數(shù)據(jù)成員:銷售額sales和靜態(tài)數(shù)據(jù)成員提成比例 commrate;再由Salesman類派生表示銷售經理的 Salesmanager類。Salesmanager類包含新數(shù)據(jù)成員:崗位工資jobSalary。為這些類定義初始化數(shù)據(jù)的構造函數(shù), 以及輸入數(shù)據(jù)input、計算工資pay和輸岀工資條print的成員函數(shù)。設公司員工的基本工資是 2000元,銷售經理的崗位工資是 3000元,提成率=5/1000。在main函數(shù)中,輸入若干個不同類型的員工信息測試你的類結構。#include<iostream>usingnamespacestd;classEmployee{public:Employee(charSnumber[]="\0",charSname[]="\0",doublebSalary=2000){strcpy(number,Snumber);strcpy(name,Sname);basicSalary=bSalary;}voidinput()coutvv"編號:coutvv"編號:Cout?"姓名:cin?number;cin?name;}voidprint()cout?"員工:"vvname<<"\t\t編號:"<<number?"\t\t本月工資:"vvbasicSalaryvvendl;}protected:charnumber[5];charname[10];doublebasicSalary;};classSalesman:publicEmployee{public:Salesman(intsal=0){sales=sal;}voidinput(){Employee::input();coutvv"本月個人銷售額:cin>>sales;}voidpay(){salary=basicSalary+sales*commrate;}voidprint(){pay();cout?"銷售員:"<vname<<"\t\t編號:"<<number?"\t\t本月工資:"vvsalaryvvendl; }protected:staticdoublecommrate;intsales;doublesalary;};doubleSalesman::commrate=0.005;classSalesmanager:publicSalesman{public:Salesmanager(doublejSalary=3000){jobSalary=jSalary;}voidinput(){Employee::input();cout?"本月部門銷售額:";cin>>sales;X.I}voidpay(){salary=jobSalary+sales*commrate;}Ivoidprint(){pay();cout?"銷售經理:"<vname<<"\t\t編號:"<<number?"\t\t本月工資:"vvsalaryvvendl;}private:doublejobSalary;};intmain(){coutvv"基本員工\n";Employeeempl;empl.input();empl.print();cout?"銷售員\n";Salesmanemp2;emp2.input();emp2.print();cout?"銷售經理\n";Salesmanageremp3;emp3.input();emp3.print();}?試寫岀你所能想到的所有形狀(包括二維的和三維的) ,生成一個形狀層次類體系。生成的類體系以Shape作為基類,并由此派生岀 TwoDimShape類和ThreeDimShape類。它們的派生類是不同的形狀類。定義類體系中的每一個類,并用 main函數(shù)進行測試?!窘獯稹柯?。.為第7章習題7.4第2小題和第3小題的Integer和Real類定義一個派生類 IntReal:丿 \\ classIntReal:publicInteger,publicReal;使其可以進行+、-“、/、=的左、右操作數(shù)類型不同的相容運算,并符合原有運算類型轉換的語義規(guī)則。【解答】略。.使用Integer類,定義派生類Vector類:classInteger{//…protected:■■I-intn;};classVector:publicInteger{//…protected:int■v;.,-};其中,數(shù)據(jù)成員v用于建立向量,n為向量長度。要求:類的成員函數(shù)可以實現(xiàn)向量的基本算術運算。【解答】略。6?用包含方式改寫習題 8.4第5題中的Vector類,使其實現(xiàn)相同的功能。classVector{//…protected:Integerv;Integersize;};

【解答】略。7.使用Vector類,定義派生類Matrix,實現(xiàn)矩陣的基本算術運算?!窘獯稹柯?。8?用包含方式改寫習題 8.4第7題的Matrix類,使其實現(xiàn)相同的功能?!窘獯稹柯?。第9章虛函數(shù)與多態(tài)性9.1選擇題1?在1?在C++中,要實現(xiàn)動態(tài)聯(lián)編,必須使用(類名 (B)派生類指針?在下列函數(shù)中,不能說明為虛函數(shù)的是((A)私有成員函數(shù) (B)公有成員函數(shù)數(shù)D)調用虛函數(shù)。(C)對象名 (D)基類指針C)。(C)構造函數(shù) (D)析構函3?在派生類中重載一個虛函數(shù)時,要求函數(shù)名、參數(shù)的個數(shù)、參數(shù)的類型、參數(shù)的順序和函數(shù)的返回值(A)。(A)相同(B)不同(C)相容(D)部分相同4?在C++中,根據(jù)(D)識別類層次中不同類定義的虛函數(shù)版本。(A)參數(shù)個數(shù) (B)參數(shù)類型 (C)函數(shù)名 (D)this指針類型5.虛析構函數(shù)的作用是( C)。(A)虛基類必須定義虛析構函數(shù) (B)類對象作用域結束時釋放資源(C)delete動態(tài)對象時釋放資源 (D)無意義?在下列函數(shù)原型中, (B)聲明了fun為純虛函數(shù)。(A)voidfun()=0; (B)virtualvoidfun()=0;(C)virtualvoidfun(); (D)virtualvoidfun(){};?若一個類中含有純虛函數(shù),則該類稱為(C)。(A)基類 (B)純基類 (C)抽象類 (D)派生類8?假設Aclass為抽象類,下列正確的說明語句是(B)。(A)Aclassfun(int); (B)Aclassp;(C)intfun(Aclass);(D)AclassObj;9?在下列描述中,正確的是(D)(A)虛函數(shù)是沒有實現(xiàn)的函數(shù)(C)抽象類是只有純虛函數(shù)的類純虛函數(shù)是返回值等于 0的函數(shù)(D)抽象類指針可以指向不同的派生類10?構造異質鏈表的意義是( D)。(A)用數(shù)組組織類

溫馨提示

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

評論

0/150

提交評論