




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第八章多態(tài)1.單項選擇題(1).以下關于運算符重載描述中,(D)是正確。(A)能夠改變參加運算操作數(shù)個數(shù) (B)能夠改變運算符原來優(yōu)先級(C)能夠改變運算符原來結合性 (D)不能改變原運算符語義(2).以下函數(shù)中,不能重載運算符函數(shù)是(b)。(A)組員函數(shù) (B)結構函數(shù) (C)普通函數(shù)(D)友員函數(shù)(3).要求用組員函數(shù)重載運算符是(A)。(A)= (B)== (C)<= (D)++(4).要求用友員函數(shù)重載運算符是(C)。(A)= (B)[] (C)<< (D)()(5).在C++中,要實現(xiàn)動態(tài)聯(lián)編,必須使用(D)調用虛函數(shù)。(A)類名 (B)派生類指針 (C)對象名 (D)基類指針(6).以下函數(shù)中,不能說明為虛函數(shù)是(C)。(A)私有組員函數(shù) (B)公有組員函數(shù) (C)結構函數(shù) (D)析構函數(shù)(7).在派生類中,重載一個虛函數(shù)時,要求函數(shù)名、參數(shù)個數(shù)、參數(shù)類型、參數(shù)次序和函數(shù)返回值(A)。(A)相同 (B) 不一樣 (C)相容 (D)部分相同(8).C++中,依照(D)識別類層次中不一樣類定義虛函數(shù)版本。(A)參數(shù)個數(shù) (B)參數(shù)類型 (C)函數(shù)名 (D)this指針類型(9).虛析構函數(shù)作用是(C)。(A)虛基類必須定義虛析構函數(shù) (B)類對象作用域結束時釋放資源(C) delete動態(tài)對象時釋放資源 (D)無意義(10).下面函數(shù)原型中,(B)申明了fun為純虛函數(shù)。(A)voidfun()=0;(B)virtualvoidfun()=0;(C)virtualvoidfun(); (D)virtualvoidfun(){};(11).若一個類中含有純虛函數(shù),則該類稱為(C)。(A)基類 (B)純基類 (C)抽象類 (D)派生類(12).假設Aclass為抽象類,以下正確說明語句是(B)。(A)Aclassfun(int);(B)Aclass*p;(C)intfun(Aclass);(D)AclassObj;2.在C++中,使用類體系依靠什么機制實現(xiàn)程序運行時多態(tài)?【解答】 在C++中,基類指針能夠指向派生類對象,以及基類中擁有虛函數(shù),是支持多態(tài)性前提。程序經過用同一個基類指針訪問不一樣派生類虛函數(shù)重載版本實現(xiàn)程序運行時多態(tài)。C++虛特征負責自動地在程序運行時把基類指針關聯(lián)類型轉換成當前指向對象派生類類型。另外,抽象類機制提供了軟件抽象和可擴展性伎倆,實現(xiàn)運行時多態(tài)性。3.假如一個類虛函數(shù)被申明為私有組員函數(shù),會有語法錯誤嗎?當它作為基類時,能夠在應用類體系時實現(xiàn)動態(tài)聯(lián)編嗎?請你驗證一下?!窘獯稹繘]有語法錯誤。但在應用類體系時無法實現(xiàn)動態(tài)編聯(lián)和多態(tài)。因為私有組員函數(shù)只在類內可見,在類外無法調用,無法在類外經過基類指針實現(xiàn)多態(tài)。程序略。4.虛函數(shù)和純虛函數(shù)區(qū)分是什么?【解答】虛函數(shù)定義時冠以關鍵字virtual,本身有實當代碼,作用是引導基類指針依照指向對象調用類體系中不一樣重載版本函數(shù)。純虛函數(shù)是指在說明時代碼“為0”虛函數(shù),即純虛函數(shù)本身并沒有實當代碼,必須經過它派生類定義實現(xiàn)版本。5.閱讀以下程序,寫出運行結果。#include<iostream>usingnamespacestd;classT{public:T(){a=0;b=0;c=0;} 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=a*obj.a;tempobj.b=b*obj.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):"<<"a="<<a<<'\t'<<"b="<<b<<'\t'<<"c="<<c<<'\t'<<endl;(obj2*obj3).get(a,b,c);cout<<"(obj2*obj3):"<<"a="<<a<<'\t'<<"b="<<b<<'\t'<<"c="<<c<<'\t'<<endl;}【解答】(obj1*obj2):a=5b=10c=15(obj2*obj3):a=25b=50c=756.閱讀以下程序,寫出運行結果。#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(){cout<<"("<<x<<","<<y<<")"<<endl;}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=";v3.display();}【解答】v1=(1,2)v2=(3,4)v3=v1+v2=(4,6)7.閱讀以下程序,寫出運行結果。#include<iostream>usingnamespacestd;classBclass{public:Bclass(inti,intj){x=i;y=j;}virtualintfun(){return0;}protected:intx,y;};classIclass:publicBclass{public:Iclass(inti,intj,intk):Bclass(i,j){z=k;}intfun(){return(x+y+z)/3;}private:intz;};intmain(){Iclassobj(2,4,10);Bclassp1=obj;cout<<p1.fun()<<endl;Bclass&p2=obj;cout<<p2.fun()<<endl;cout<<p2.Bclass::fun()<<endl;Bclass*p3=&obj;cout<<p3->fun()<<endl;}【解答】05058.閱讀以下程序,寫出運行結果。#include<iostream>usingnamespacestd;classBase{public:virtualvoidgetxy(inti,intj=0){x=i;y=j;}virtualvoidfun()=0;protected:intx,y;};classA:publicBase{public:voidfun(){cout<<"x="<<x<<'\t'<<"y=x*x="<<x*x<<endl;}};classB:publicBase{public: voidfun(){cout<<"x="<<x<<'\t'<<"y="<<y<<endl; cout<<"y=x/y="<<x/y<<endl; }};intmain(){Base*pb;Aobj1;Bobj2;pb=&obj1;pb->getxy(10);pb->fun();pb=&obj2;pb->getxy(100,20);pb->fun();}【解答】 x=10y=x*x=100x=100y=20y=x/y=59.分別使用組員函數(shù)和友員函數(shù)編寫程序重載運算符“+”,使該運算符能實現(xiàn)兩個字符串連接?!窘獯稹浚?)使用組員函數(shù)#include<iostream>#include<cstring>usingnamespacestd;classs{public: s(){*str='\0';}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()<<endl;}(2)使用友員函數(shù)#include<iostream>#include<cstring>usingnamespacestd;classs{public: s(){*str='\0';}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;}intmain(){sobj1("Visual"),obj2("C++"),obj3;obj3=obj1+obj2;cout<<obj3.gets()<<endl;}10.定義一個整數(shù)計算類Integer,實現(xiàn)短整數(shù)+,-,*,/基本算術運算。要求能夠進行數(shù)據(jù)范圍檢驗(-32768~32767,或自行設定),數(shù)據(jù)溢出時顯示錯誤信息并中止程序運行。【解答】#include<iostream>usingnamespacestd;classInteger{private:shorta;public:Integer(shortn=0){a=n;}Integeroperator+(Integer);Integeroperator-(Integer);Integeroperator*(Integer);Integeroperator/(Integer);Integeroperator=(Integer); voiddisplay() {cout<<a<<endl;}};IntegerInteger::operator+(Integerx){Integertemp;if(a+x.a<-32768||a+x.a>32767){cout<<"Dataoverflow!"<<endl;abort();}temp.a=a+x.a;returntemp;}IntegerInteger::operator-(Integerx){Integertemp;if(a-x.a<-32768||a-x.a>32767){cout<<"Dataoverflow!"<<endl;abort();}temp.a=a-x.a;returntemp;}IntegerInteger::operator*(Integerx){Integertemp;if(a*x.a<-32768||a*x.a>32767){cout<<"Dataoverflow!"<<endl;abort();}temp.a=a*x.a;returntemp;}IntegerInteger::operator/(Integerx){Integertemp;if(a/x.a<-32768||a/x.a>32767){cout<<"Dataoverflow!"<<endl;abort();}temp.a=a/x.a;returntemp;}IntegerInteger::operator=(Integerx){a=x.a; return*this;}intmain(){IntegerA(90),B(30),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<<"C=A*B=";C.display();C=A/B;cout<<"C=A/B=";C.display();}11.使用虛函數(shù)編寫程序求球體和圓柱體體積及表面積。因為球體和圓柱體都能夠看做由圓繼承而來,所以能夠把圓類Circle作為基類。在Circle類中定義一個數(shù)據(jù)組員radius和兩個虛函數(shù)area和volume。由Circle類派生Sphere類和Column類。在派生類中對虛函數(shù)area和volume重新定義,分別求球體和圓柱體體積及表面積?!窘獯稹?include<iostream>usingnamespacestd;constdoublePI=3.14159265;classcircle{public:circle(doubler){radius=r;} virtualdoublearea(){return0.0;}virtualdoublevolume(){return0.0;}protected: doubleradius;};classsphere:publiccircle{public: sphere(doubler):circle(r){} doublearea(){return4.0*PI*radius*radius;} doublevolume(){return4.0*PI*radius*radius*radius/3.0;}};classcolumn:publiccircle{public: column(doubler,doubleh):circle(r){height=h;} doublearea(){return2.0*PI*radius*(height+radius);} doublevolume(){returnPI*radius*radius*height; }private: doubleheight;};intmain(){circle*p; spheresobj(2); p=&sobj; cout<<"球體:"<<endl; cout<<"體積="<<p->volume()<<endl;cout<<"表面積="<<p->area()<<endl; columncobj(3,5);p=&cobj; cout<<"圓柱體:"<<endl; cout<<"體積="<<p->volume()<<endl;cout<<"表面積="<<p->area()<<endl;}12.某學校對教師每個月工資計算要求以下:固定工資+課時補助。教授固定工資為5000元,每個課時補助50元。副教授固定工資為3000元,每個課時補助30元。講師固定工資為元,每個課時補助20元。定義教師抽象類,派生不一樣職稱教師類,編寫程序求若干個教師月工資?!窘獯稹?include<iostream>usingnamespacestd;classteacher{public:teacher(chartname[],inttime){strcpy(name,tname);coursetime=time;} virtualintpay()=0; virtualvoidprint()=0; char*getname(){returnname;} intgetcoursetime(){returncoursetime;}protected: charname[30]; intcoursetime;};classprofessor:publicteach
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 高中食品健康知識專題
- 維護公共衛(wèi)生營造健康環(huán)境
- 危重癥患者ECMO急救與多學科協(xié)作護理
- 科學與生命健康
- 小學生保險教育
- 2025年脲醛塑料項目申請報告
- 【呼倫貝爾】2025年內蒙古大興安嶺農墾(集團)有限責任公司招錄人才45人筆試歷年典型考題及考點剖析附帶答案詳解
- 文庫發(fā)布:護理課件
- 文庫發(fā)布:勞動法課件
- 腎超聲教學課件
- 2024屆湖北省仙桃市小升初復習語文模擬試卷含答案
- AI技術在智能旅游中的應用
- FZ/T 07025-2022針織行業(yè)綠色工廠評價要求
- 星巴克運營管理手冊
- 《物理化學48學時》課程教學大綱
- 全國職業(yè)大賽(中職)ZZ006水利工程制圖與應用賽項賽題第1套
- 火鍋店領班的崗位職責和工作流程
- 基恩士靜電測量儀說明書
- 健康照護師(初級)理論知識考核試題
- 工程量確認單
- 鐵總物資〔2015〕117號:鐵路建設項目甲供物資目錄
評論
0/150
提交評論