派生與繼承習(xí)題答案_第1頁
派生與繼承習(xí)題答案_第2頁
派生與繼承習(xí)題答案_第3頁
派生與繼承習(xí)題答案_第4頁
派生與繼承習(xí)題答案_第5頁
已閱讀5頁,還剩46頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第七章派生與繼承1.單項選擇題(1).以下關(guān)于繼承描述中,錯誤是(B)。A.繼承是重用性主要機制B.C++語言支持單重繼承和雙重繼承C.繼承關(guān)系不是可逆D.繼承是面向?qū)ο蟪绦蛟O(shè)計語言主要特征(2).以下關(guān)于基類和派生類描述中,錯誤是(C)。A.一個基類能夠生成多個派生類B.基類中全部組員都是它派生類組員C.基類中組員訪問權(quán)限繼承到派生類中不變D.派生類中除了繼承基類組員還有自己組員(3).以下關(guān)于派生類描述中,錯誤是(D)。A.派生類最少有一個基類B.一個派生類能夠作另一個派生類基類C.派生類結(jié)構(gòu)函數(shù)中應(yīng)包含直接基類結(jié)構(gòu)函數(shù)D.派生類默認(rèn)繼承方式是public(4).派生類對象能夠直接訪問基類組員是(A)。A.公有繼承公有組員 B.保護(hù)繼承公有組員C.私有繼承公有組員 D.公有繼承保護(hù)組員(5).以下描述中,錯誤是(D)。A.基類protected組員在public派生類中依然是protected組員B.基類private組員在public派生類中是不可訪問C.基類public組員在private派生類中是private組員D.基類public組員在protected派生類中仍是public組員(6).派生類結(jié)構(gòu)函數(shù)組員初始化列表中,不能包含初始化項是(B)。A.基類結(jié)構(gòu)函數(shù) B.基類子對象C.派生類子對象 D.派生類本身數(shù)據(jù)組員(7).以下關(guān)于子類型描述中,錯誤是(B)。A.在公有繼承下,派生類是基類子類型B.假如類A是類B子類型,則類B也是類A子類型C.假如類A是類B子類型,則類A對象就是類B對象D.在公有繼承下,派生類對象能夠初始化基類對象引用(8).以下關(guān)于多繼承二義性描述中,錯誤是(D)。A.一個派生類多個基類中出現(xiàn)了同名組員時,派生類對同名組員訪問可能出現(xiàn)二義性B.一個派生類有多個基類,而這些基類又有一個共同基類,派生類訪問公共基類組員時,可能出現(xiàn)二義性C.處理二義性方法是采取類名限定D.基類和派生類中同時出現(xiàn)同名組員時,會產(chǎn)生二義性2.多重繼承與單一繼承區(qū)分是什么?答:派生類只有一個基類稱為單一繼承。單一繼承定義格式為:class<派生類名>:<繼承方式><基類名>{派生類中新組員定義}派生類有兩個或兩個以上基類稱為多重繼承。多重繼承定義格式為:class<派生類名>:<繼承方式1><基類名1>,<繼承方式2><基類名2>,……<繼承方式n><基類名n>{派生類中新組員定義}3.繼承有哪三種繼承方式,各自有何特點?答:繼承方式主要表示派生類繼承基類時采取繼承方式,主要有三種,即公有繼承、私有繼承和保護(hù)繼承。(1)公有繼承(public)。公有繼承特點是基類公有組員和保護(hù)組員作為派生類組員時,它們都保持原有狀態(tài),而基類私有組員依然是私有。(2)私有繼承(private)私有繼承特點是基類公有組員和保護(hù)組員作為派生類私有組員,而且不能被這個派生類子類訪問。(3)保護(hù)繼承(protected)保護(hù)繼承特點是基類全部公有組員和保護(hù)組員都成為派生類保護(hù)組員,而且只能被它派生類組員函數(shù)或友元訪問,基類私有組員依然是私有。4.在定義派生類過程中,怎樣對基類數(shù)據(jù)組員進(jìn)行初始化?答:因為基類在派生類中通常是隱藏,所以依序經(jīng)過調(diào)用基類結(jié)構(gòu)函數(shù)來設(shè)定基類數(shù)據(jù)組員初值。它格式為<派生類名>(形參表):基類1(參數(shù)表),基類2(參數(shù)表)…對象組員1(參數(shù)表),對象組員2(參數(shù)表)…{}5.什么是賦值兼容規(guī)則?賦值兼容規(guī)則實質(zhì)是什么?試舉例說明。答:賦值兼容規(guī)則是指,對于共有派生類來說,能夠?qū)⑴缮悓ο筚x值給其基類。它實質(zhì)上就是基類對象內(nèi)存空間和派生類對象中基類拷貝內(nèi)存空間引用兼容。6.什么是虛基類?它作用是什么?答:虛基類不是指基類是虛,而是指在派生類中指定基類是虛繼承方式。使用虛基類目標(biāo)是在多重派生中使用共有基類在派生類中只有一個拷貝從而處理有多個基類拷貝所產(chǎn)生二義性問題。7.分析以下程序運行結(jié)果。#include<iostream.h>classA{private:inta;public:A(inti=0){a=i;}voidshow(){cout<<"a="<<a<<endl;}};classB{private:intb;public:B(inti=0){b=i;}voidshow(){cout<<"b="<<b<<endl;}};classC:publicA,publicB{private:intc;public:C(inti=0,intj=0,intk=0):A(i),B(j){c=k;}voidshow(){A::show();B::show();cout<<"c="<<c<<endl;}};voidmain(){Bb(12);b.show();Cc1,c2(30,40),c3(70,80,90);c1.show();c2.show();c3.show();c2.B::show();}答:程序運行結(jié)果:b=12a=0b=0c=0a=30b=40c=0a=70b=80c=90b=40分析:(1)本程序是多重繼承程序,類C繼承了類A和類B數(shù)據(jù)組員。(2)在主程序中,分別對類C對象c1、c2、c3賦不一樣值,則對類A和類B數(shù)據(jù)組員賦值也不一樣。8.分析以下程序運行結(jié)果。#include<iostream.h>classBase1{public:Base1(inti){cout<<"調(diào)用基類Base1結(jié)構(gòu)函數(shù):"<<i<<endl;}};classBase2{public:Base2(intj){cout<<"調(diào)用基類Base2結(jié)構(gòu)函數(shù):"<<j<<endl;}};classA:publicBase1,publicBase2{public:A(inta,intb,intc,intd):Base2(b),Base1(c),b2(a),b1(d){cout<<"調(diào)用派生類A結(jié)構(gòu)函數(shù):"<<a+b+c+d<<endl;}private:Base1b1;Base2b2;};intmain(){Aobj(1,2,3,4);}答:調(diào)用基類BASE1結(jié)構(gòu)函數(shù):3調(diào)用基類BASE2結(jié)構(gòu)函數(shù):2調(diào)用基類BASE1結(jié)構(gòu)函數(shù):4調(diào)用基類BASE2結(jié)構(gòu)函數(shù):1調(diào)用派生類A結(jié)構(gòu)函數(shù):109.分析以下程序運行結(jié)果。#include<iostream.h>classA{public:A(constchar*s){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<<s2<<endl;}};classD:publicB,publicC{public:D(constchar*s1,constchar*s2,constchar*s3,constchar*s4):B(s1,s2),C(s1,s3),A(s1){cout<<s4<<endl;}};intmain(){D*ptr=newD("classA","classB","classC","classD");deleteptr;}答:classAclassBclassCclassD10.有些人定義一個教師類派生一個學(xué)生類。他認(rèn)為“姓名”和“性別”是教師、學(xué)生共有屬性,申明為public,“職稱”和“工資”是教師特有,申明為private。在學(xué)生類中定義特有屬性“班級”和“成績”。所以有classteacher{public:charname[20];charsex;//……Private:chartitle[20];doublesalary;};classstudent:publicteacher{//……private:chargrade[20];intscore;};你認(rèn)為這么定義適宜嗎?請做出你認(rèn)為合理類結(jié)構(gòu)定義。答:不宜,這么造成數(shù)據(jù)冗余。合理結(jié)構(gòu)是提取它們共有數(shù)據(jù)和操作定義一個基類,然后分別定義teacher和student作為派生類。classperson{protected:charname[20];charsex;//…… };classteacher:publicteache{//……private:chartitle[20];doublesalary;};classstudent:publicteacher{//……private:chargrade[20];intscore;};11.定義一個描述坐標(biāo)位置類location,從location派生出正方形類square,在正方形類中將location類作為正方形起始點,并求正方形周長和面積。答:#include<iostream.h>classlocation{protected:intx,y;public:location(inta=0,intb=0){x=a;y=b;}};classsquare:publiclocation{private:intlen;intgirth;intarea;public:square(intx,inty,intt):location(x,y){len=t;}voidset();voidshow();};voidsquare::set(){girth=4*len;area=len*len;}voidsquare::show(){cout<<"正方形坐標(biāo)點為:"<<x<<","<<y<<endl;cout<<"正方形周長為:"<<girth<<endl;cout<<"正方形面積為:"<<area<<endl;}voidmain(){squarem(10,10,5);m.set();m.show();}12.把定義平面直角坐標(biāo)系上一個點類Point作為基類,派生出描述一條直線類Line,再派生出一個矩形類Rect。要求組員函數(shù)能求出兩點間距離,矩形周長和面積等。設(shè)計一個測試程序,并結(jié)構(gòu)完整程序。答:#include<iostream>#include<cmath>usingnamespacestd;classPoint{public:Point(intx=0,inty=0){this->x=x;this->y=y;}public:intx,y; };classLine:publicPoint{public:Line(intx1=0,inty1=0,intx2=0,inty2=0):a(x1,y1),b(x2,y2){}doubleLength(){ints=a.x-b.x;intt=a.y-b.y;returnsqrt(s*s+t*t);}private:Pointa,b;};classRect:publicLine{public:Rect(intx1,inty1,intx2,inty2):l1(x1,y1,x1,y2),l2(x1,y1,x2,y1)//x1,y1是矩形左下角坐標(biāo),x2,y2是矩形右上角坐標(biāo) {}doubleSumLength(){//cout<<"矩形周長是"<<<<endl; return(l1.Length()+l2.Length())*2; }doublesquare(){//cout<<"矩形周長是"<<<<endl;returnl1.Length()*l2.Length(); }private:Linel1,l2;};voidmain(){Lineline(0,0,10,0);cout<<"這條線段長度為:"<<line.Length();Rectrect(0,0,10,10);cout<<"矩形周長是"<<rect.SumLength()<<endl;cout<<"矩形周長是"<<rect.square()<<endl;}13.假設(shè)某銷售企業(yè)有銷售經(jīng)理和銷售員工,月工資計算方法是:銷售經(jīng)理固定月薪為8000元并提取銷售額5/1000作為工資;銷售員工只提取銷售額5/1000作為工資。編一程序,定義一個基類Employee,它包含三個數(shù)據(jù)組員number、name和salary,以及用于輸入編號和姓名結(jié)構(gòu)函數(shù)。由Employee類派生Salesman類,再由Salesman類派生Salesmanager類。Salesman類包含兩個新數(shù)據(jù)組員commrate和sales,還包含用于輸入銷售額并計算銷售員工工資組員函數(shù)pay和用于輸出組員函數(shù)print。Salesmanager類包含新數(shù)據(jù)組員monthlypay,以及用于輸入銷售額并計算銷售經(jīng)理工資組員函數(shù)pay、用于輸出組員函數(shù)print()。在main函數(shù)中,測試你類結(jié)構(gòu),求若干個不一樣員工工資。答:#include<iostream>usingnamespacestd;classemployee{public:employee(){cout<<"編號:";cin>>number;cout<<"姓名:";cin>>name;salary=0;}protected:charnumber[5];charname[10];doublesalary;};classsalesman:publicemployee{public:salesman(){commrate=0.005;}voidpay(){cout<<name<<"本月銷售額:";cin>>sales;salary=sales*commrate;}voidprint(){cout<<"銷售員:"<<name<<"編號:"<<number<<"本月工資:"<<salary<<endl; }protected:doublecommrate;doublesales;};classsalesmanager:publicsalesman{public:salesmanager(){monthlypay=8000;commrate=0.005;}voidpay(){cout<<name<<"本月部門銷售額:";cin>>sales;salary=monthlypay+sales*commrate;}voidprint(){cout<<"銷售經(jīng)理:"<<name<<"編號:"<<number<<"本月工資:"<<salary<<endl; }private:doublemonthlypay;};intmain(){salesmanobj1;obj1.pay();obj1.print();salesmanagerobj2;obj2.pay();obj2.print();}14.編寫一個程序?qū)崿F(xiàn)那一個班級學(xué)生學(xué)期成績管理。個人信息類Person數(shù)據(jù)組員有:姓名,年紀(jì),性別;課程類Course數(shù)據(jù)組員有:課程名,學(xué)分,成績;學(xué)生類Student從Person類派生,并增加數(shù)據(jù)組員:學(xué)號,Course對象數(shù)據(jù)組員數(shù)組(大小為8),總成績,總學(xué)分和平均成績;班級類Class類數(shù)據(jù)組員有:Student類對象組員數(shù)組(大小由結(jié)構(gòu)函數(shù)確定),班號,班級人數(shù)等。要求:(1)本班級Class類對象組員數(shù)組需要在結(jié)構(gòu)函數(shù)中用new動態(tài)分配內(nèi)存空間,在析構(gòu)函數(shù)中釋放。在類Class中添加組員函數(shù)Seek,經(jīng)過學(xué)號查找并輸出該學(xué)生全部信息。(2)結(jié)構(gòu)三個學(xué)生數(shù)據(jù),每個學(xué)生都有三門課程成績,輸入并顯示這些數(shù)據(jù)。(3)依照類需要添加適當(dāng)其余組員,編寫完整程序并測試。答:#include<iostream.h>#include<cstring.h>classPerson{public:Person(char*name,intage,charsex='M'){strncpy(this->name,name,20);this->age=age;this->sex=sex; }voidshow(){ cout<<"學(xué)生名字是:"<<name<<endl;cout<<"學(xué)生年紀(jì)是:"<<age<<endl;cout<<"學(xué)生性別是:"<<sex<<endl;}private:charname[20];intage;charsex; };classCourse{public:Course(){cout<<"請輸入課程名,學(xué)分和分?jǐn)?shù)"<<endl;cin>>coursename>>credit>>score; }public:charcoursename[20];floatscore;floatcredit;};classStudent:Person{public:Student(char*name="NULL",intage=0,charsex='M',char*no="0"):Person(name,age,sex),Course(){strncpy(this->no,no,20);}doubleMscoresum(){scoresum=0;for(inti=0;i<2;i

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論