




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
C++簡答題和編程題匯總一、簡答題:1.有以下程序結(jié)構(gòu),請分析訪問屬性。classCA{public:voidfun1();inti;protected:voidfun2();intj;private:intk;};classCB:protectedCA{public:voidfun3();protected:intm;private:intn;};classCC:publicCB{public:voidfun4();private:intp;};intmain(){CAa;CBb;CCc1;return0;}問:(1)派生類CB中的成員函數(shù)能否引用基類CA中的數(shù)據(jù)成員i,j,k?(2)派生類CC中的成員函數(shù)能否調(diào)用基類CA中的成員函數(shù)funl和fun2?(3)能否在main函數(shù)中用c.fun1(),c.fun2(),c.fun和()c.fun4(調(diào)用fun1,fun2,fun3,fur成員函數(shù)?答:(1)可以用bl.i引用對象b中的基類A的成員i,因?yàn)樗枪脭?shù)據(jù)成員。不能用bl.j引用對象b中的基類A的成員j,因?yàn)樗潜Wo(hù)數(shù)據(jù)成員,在類外不能訪問。不能用bl.k引用對象b中的基類A的成員k,因?yàn)樗撬接袛?shù)據(jù)成員,在類外不能訪問。(2)可以引用基類A中的數(shù)據(jù)成員i,j,因?yàn)樗鼈冊谂缮愔惺枪贸蓡T和保護(hù)成員,可以被派生類的成員函數(shù)訪問。不可以引用基類A中的數(shù)據(jù)成員k,它在派生類中是不可訪問的成員。(3)可以調(diào)用成員函數(shù)f1,f3,f4,它們是公用成員函數(shù)。不能調(diào)用成員函數(shù)f2,因?yàn)樗潜Wo(hù)成員函數(shù)。2.為什么要使用虛基類?怎樣定義虛基類?用一個實(shí)例來解釋虛基類在其派生類中的存儲方式。答:如果一個派生類有多個直接基類,而這些直接基類又有一個共同的基類,則在最終的派生類中會保留該間接共同基類數(shù)據(jù)成員的多份同名成員。如圖所示:(a)派生關(guān)系(b)存儲圖存儲關(guān)系如(b),在職研究生類有兩個Person拷貝。為避免這種情況,可使用虛基類。虛基類(virtualbaseclass)定義方式如下:class派生類名:virtual繼承方式基類類名{...};virtual關(guān)鍵字只對緊隨其后的基類名起作用。采用虛基類后存儲關(guān)系如下:—Person1iJPersonF%jStudentFGStudentF三GStudentfStudent新成員1GStudent新成員—Person1kjPerson?EmployeEmployee新成員rPerson成員EGStudent新成員采用虛基類后在職研究生類儲存圖3.請比較函數(shù)重載和虛函數(shù)在概念和使用方式方面有什么區(qū)別?答:(1)函數(shù)重載可以用于普通函數(shù)(非成員函數(shù))和成員函數(shù),而虛函數(shù)只能用于類的成員函數(shù);(2)函數(shù)重載可以用于構(gòu)造函數(shù),而虛函數(shù)不能用于構(gòu)造函數(shù);(3)如果對成員函數(shù)進(jìn)行重載,則重載的函數(shù)與被重載的函數(shù)應(yīng)當(dāng)都是同一個類的成員函數(shù),不能分屬于兩個不同繼承層次的類。虛函數(shù)是對同一類族中基類和派生類的同名函數(shù)的處理,即允許在派生類中對基類的成員函數(shù)重新定義。(4)重載的函數(shù)必須具有相同的函數(shù)名,但函數(shù)參數(shù)個數(shù)和參數(shù)類型二者中至少有一樣不同。而虛函數(shù)則要求在同一族中的所有虛函數(shù)不僅函數(shù)名相同,而且要求函數(shù)類型、函數(shù)參數(shù)個數(shù)和參數(shù)類型都全部相同。(5)重載的函數(shù)是在程序編譯階段確定操作對象的,屬靜態(tài)關(guān)聯(lián)。虛函數(shù)是在程序運(yùn)行階段確定操作的對象的,屬動態(tài)關(guān)聯(lián)。4.派生類的析構(gòu)函數(shù)中需完成什么任務(wù)?是否要編寫對基數(shù)和成員對象的析構(gòu)函數(shù)的調(diào)用?為什么?答:析構(gòu)函數(shù)的功能是在對象被系統(tǒng)釋放之前做必要的“清理現(xiàn)場”的工作,析構(gòu)函數(shù)無返回類型也沒有參數(shù),情況比較簡單。派生類析構(gòu)函數(shù)定義格式與非派生類無任何差異,不要編寫對基數(shù)和成員對象的析構(gòu)函數(shù)的調(diào)用,只要在函數(shù)體內(nèi)把派生類新增一般成員處理好就可以了,因?yàn)閷π略龅某蓡T對象和基類的善后工作,系統(tǒng)會自己調(diào)用成員對象和基類的析構(gòu)函數(shù)來完成。5.簡單敘述派生類與基類的賦值兼容規(guī)則。答:凡是基類所能解決的問題,公有派生類都可以解決。在任何需要基類對象的地方都可以用公有派生類的對象來代替,這條規(guī)則稱賦值兼容規(guī)則。它包括以下情況:(1)派生類的對象可以賦值給基類的對象,這時是把派生類對象中從對應(yīng)基類中繼承來的成員賦值給基類對象。反過來不行,因?yàn)榕缮惖男鲁蓡T無值可賦。可以將一個派生類的對象的地址賦給其基類的指針變量,但只能通過這個指針訪問派生類中由基類繼承來的成員,不能訪問派生類中的新成員。同樣也不能反過來做。派生類對象可以初始化基類的引用。引用是別名,但這個別名只能包含派生類對象中的由基類繼承來的成員。6.為什么析構(gòu)函數(shù)總是要求說明為虛函數(shù)?答:在基類中及其派生類中都動態(tài)分配內(nèi)存空間時,必須把析構(gòu)函數(shù)定義為虛函數(shù),實(shí)現(xiàn)撤消對象時的多態(tài)性。根據(jù)賦值兼容規(guī)則可以用基類的指針指向派生類對象,如果由該指針撤銷派生類對象,則必須將析構(gòu)函數(shù)說明為虛函數(shù),實(shí)現(xiàn)多態(tài)性,自動調(diào)用派生類析構(gòu)函數(shù)。我們總是要求將類設(shè)計(jì)成通用的,無論其他程序員怎樣調(diào)用都必須保證不出錯,所以必須把析構(gòu)函數(shù)定義為虛函數(shù)。二、編程題.(類的聲明和運(yùn)算符重載)設(shè)計(jì)一個日期類Date,要求:(1)可以建立具有指定日期(年、月、日)的Date對象,默認(rèn)日期是2007.1.1。(2)可以從輸出流輸出一個格式為“年-月-日”的日期,其中年是四位數(shù)據(jù),月、日可以是一位也可以是兩位數(shù)據(jù)。(3)可以動態(tài)地設(shè)置年、月、日。(4)可以用運(yùn)算符==對兩個日期進(jìn)行是否相等的比較。(5)在主函數(shù)中進(jìn)行該類的測試。.編寫一個程序,涉及一個類score用于統(tǒng)計(jì)一個班的學(xué)生成績,其中使用一個靜態(tài)數(shù)據(jù)成員sumfenshu存儲總分和一個靜態(tài)成員函數(shù)Getsumfenshu(返回該總分。.用類模板方式設(shè)計(jì)一個棧類Stack<T>,其中有兩個私有數(shù)據(jù)成員s口(存放棧元素)和top(棧頂元素下標(biāo)),以及三個公有成員函麴ush(元素入棧)、pop(元素出棧)和stackempty(判斷棧是否為空),并建立一個整數(shù)棧和一個字符棧。.(類的聲明和友元函數(shù))設(shè)計(jì)一個程序,其中有三個類CBank、BBank、GBank分別為中國銀行類、工商銀行類和農(nóng)業(yè)銀行類。每個類都包含一個私有數(shù)據(jù)balance用于存放儲戶在該行的存款數(shù),另有一個友元函數(shù)x用于顯示三家銀行中存款最多的銀行和存款數(shù)。類結(jié)構(gòu)如圖所示:編程題2的類結(jié)構(gòu).(類的繼承和類的組合)實(shí)現(xiàn)兩個類person類和scores類,其中person類中包含了公有的個人基本信息,如姓名、性別和年齡等。scores類包含了公有的考試科目成員如語文、數(shù)學(xué)、英語等的成績。現(xiàn)要求實(shí)現(xiàn)一個student類,它繼承自person類,并加入了私有的一個表示學(xué)號的新成員number和一個scores成員對象。要求:(1)student類中的個人基本信息和成績單的訪問屬性為私有;(2)重載的student構(gòu)造函數(shù)能接受person對象和score對象作為參數(shù),也能接受直接給出的個人基本信息和成績信息作為參數(shù)。(3)student類提供設(shè)置和訪問個人信息和成績的接口函數(shù)。.(虛函數(shù))已知一個抽象基類person,其結(jié)構(gòu)如下:classperson{public:virtualvoidinfo()=0;}要求在person類的基礎(chǔ)上派生一個student類和一個teacher類,并實(shí)現(xiàn)虛函數(shù)info(),它打印出學(xué)生和教師的個人信息。其中,學(xué)生的個人信息包括學(xué)號、姓名、年齡、性別和系別;教師的個人信息包括工號、姓名、年齡、性別和職稱。另外,實(shí)現(xiàn)全局函數(shù)print(person*)它接受一個person類型的指針作為參數(shù),調(diào)用person的info()函數(shù),打印出person的個人信息。實(shí)例化student和teacher對象,對象的個人信息在定義對象時給定,用rint()函數(shù)打印出他們的個人信息。.下列shape類是一個表示形狀的抽象類,area()為求圖形面積的函數(shù),total(則是一個通用的用以求不同形狀的圖形面積總和的函數(shù)。請曬?類派生三角形類triangle、)矩形類(rectangle,并給出具體的求面積函數(shù)。#include<iostream>usingnamespacestd;classshape{public:virtualdoublearea()const=0;};doubletotal(shape*s[],intn){doublesum=0.0;for(inti=0;i<n;i++)sum+=s[i]->area();returnsum;}classTriangle:publicshape{public:Triangle(doubleh,doublew){H=h;W=w;}doublearea()const{returnH*W*0.5;}private:doubleH,W;};classRectangle:publicshape{public:Rectangle(doubleh,doublew){H=h;W=w;}doublearea()const{returnH*W;}private:doubleH,W;};intmain(){Triangletriangle1(4.0,3.3);Rectanglerectangle1(5.0,4.0);shape*arr[2]={&triangle1,&rectangle1};doublesum_area=total(arr,2);cout<<"totalarea="<<sum_area<<endl;return0;}8.編寫程序,需要求3個長方柱的體積,請編寫一個基于對象的程序。數(shù)據(jù)成員包括length(長)、width(寬)、height(高)。要求用成員函數(shù)實(shí)現(xiàn)以下功能:定義構(gòu)造函數(shù)完成長方柱的初始化;計(jì)算長方柱的體積;輸出長方柱的體積。#include<iostream>usingnamespacestd;classBox{public:Box(floatl,floatw,floath):length(l),width(w),height(h){}floatvolume();voiddisplay();public:floatlength;floatwidth;floatheight;};floatBox::volume(){return(length*width*height);}voidBox::display(){cout<<volume()<<endl;}intmain(){Boxbox1(3,2,1),box2(4,3,2),box3(5,4,3);cout<<"volmueofbox1is";box1.display();cout<<"volmueofbox2is";box2.display();cout<<"volmueofbox3is";box3.display();return0;}9.設(shè)計(jì)一個函數(shù)模板求一個數(shù)組中最大的元素,并以整數(shù)數(shù)組和字符數(shù)組進(jìn)行調(diào)試。#include<iostream>usingnamespacestd;template<classT>Tmax(Ta[],intlength){Ttemp;temp=a[0];for(inti=1;i<length;i++)if(temp<a[i])temp=a[i];returntemp;}intmain(){inta[5],m;cout<<"PleaseInput5numbers"<<endl;for(inti=0;i<5;i++)cin>>a[i];m=max(a,5);cout<<//Max=//<<m<<endl;charb[5],n;cout<</zPleaseInput5char/z<<endl;for(i=0;i<5;i++)cin>>b[i];n=max(b,5);cout<<//Max=//<<n<<endl;return0;)10.編寫一個學(xué)生和教師數(shù)據(jù)輸入和顯示程序,學(xué)生數(shù)據(jù)要求有編號、姓名、班級和成績,教師數(shù)據(jù)有編號、姓名、部門和職稱。要求將編號、姓名的輸入和顯示設(shè)計(jì)成一個類person,并作為學(xué)生數(shù)據(jù)操作類student和教師數(shù)據(jù)操作類teacher的基類,學(xué)生數(shù)據(jù)中的班級和成績的輸入和顯示在student類中實(shí)現(xiàn),教師數(shù)據(jù)中的部門和職稱的輸入和顯示在teacher類中實(shí)現(xiàn)。最后在主函數(shù)中進(jìn)行該類的測試。(14分)下面給出了基類person的主要成員:(1)私有成員:intno;編號stringname;姓名(2)公有成員:voidinput();編號和姓名的輸入voiddisplay。;編號和姓名的顯示#include<iostream>#include<string>usingnamespacestd;//定義公共基類PersonclassPerson{public:virtualvoidinput(){cin>>no>>name;}virtualvoiddisplay(){cout<<"no="<<no<<""<<"name="<<name<<endl;}private:intno;stringname;};//定義類TeacherclassTeacher:publicPerson//聲明Teacher為Person為公用派生類{public:voidinput(){cin>>title>>depart_no;}voiddisplay(){cout<<"title="<<title<<""<<"department="<<depart_no<<endl;}private:stringtitle;intdepart_no;};//定義類StudentclassStudent:virtualpublicPerson〃聲明Student為Person為公用派生類{public:voidinput(){cin>>class_no>>score;}voiddisplay(){cout<<"class_no="<<class_no<<""<<"score="<<score<<endl;}private:intclass_no;floatscore;};intmain(){Personperson;Person*p;Teacherteacher;Studentstudent;cout<<"Pleaseinputteacher'sno,name,titleanddepartment:"<<endl;p=&person;p->input();p=&teacher;p->input();cout<<"Displayteacher'sno,name,titleanddepartment:"<<endl;p=&person;p->display();p=&teacher
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 人教A版高一(下)數(shù)學(xué)必修第二冊6.1平面向量的概念【教學(xué)設(shè)計(jì)】
- 五年級上冊數(shù)學(xué)教案-2.1 軸對稱再認(rèn)識(一)|北師大版
- 2025年外國游戲大陸推廣代理合同韓文版
- (高清版)DB45∕T 477-2022 綠色食品 黑木耳生產(chǎn)技術(shù)規(guī)程
- 《第2課電視與生活 1 電視百寶箱》(教學(xué)設(shè)計(jì))-2023-2024學(xué)年四年級下冊綜合實(shí)踐活動安徽大學(xué)版
- 2025年海南工商職業(yè)學(xué)院單招職業(yè)傾向性測試題庫學(xué)生專用
- 第3課 建造塔臺(教學(xué)設(shè)計(jì))-2023-2024學(xué)年六年級下冊科學(xué) 教科版
- 2025年度個人單位間借款擔(dān)保合同
- 產(chǎn)業(yè)園區(qū)室內(nèi)外裝修合同
- 2025年度商鋪房屋租賃與智能管理系統(tǒng)合作協(xié)議
- 廣西2025年01月南寧市良慶區(qū)公開考試招考專職化城市社區(qū)工作者筆試歷年典型考題(歷年真題考點(diǎn))解題思路附帶答案詳解
- 統(tǒng)編版(2025)七年級下冊道德與法治教學(xué)計(jì)劃
- 七年級數(shù)學(xué)下冊 第11章 單元測試卷(蘇科版 2025年春)
- 2024年天津市建筑安全員A證考試題庫及答案
- 《恒瑞醫(yī)藥股權(quán)激勵實(shí)施方案探析綜述》6200字
- 《病理學(xué)》課程標(biāo)準(zhǔn)
- 傅佩榮論語三百講(1-300講)匯編
- 統(tǒng)編版一年級下冊語文全冊完整課件
- 《人力資源管理》全套教學(xué)課件
- 部編人教版語文小學(xué)六年級下冊第四單元主講教材解讀(集體備課)
- (2024年)師德師風(fēng)學(xué)習(xí)內(nèi)容教師師德師風(fēng)培訓(xùn)內(nèi)容通用多篇
評論
0/150
提交評論