面向?qū)ο笳n后答案第8章_第1頁
面向?qū)ο笳n后答案第8章_第2頁
面向?qū)ο笳n后答案第8章_第3頁
面向?qū)ο笳n后答案第8章_第4頁
面向?qū)ο笳n后答案第8章_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1.1在C+中,三種派生方式的說明符號為 public 、 private 、 protected不加說明,則默認的派生方式為private 。1.2當公有派生時,基類的公有成員成為派生類的 公有成員 ;保護成員成為派生類的 保護成員 ;私有成員成為派生類的 不能直接訪問成員 。當保護派生時,基類的公有成員成為派生類的 保護成員;保護成員成為派生類的 保護成員 ;私有成員成為派生類的 不能直接訪問成員 。1.3 派生類的構(gòu)造函數(shù)一般有3項工作要完成:首先 基類初始化 ,其次 成員對象初始化,最后 執(zhí)行派生類構(gòu)造函數(shù)體 。1.4多繼承時,多個基類中的同名的成員在派生類中由于標識符不唯一而出現(xiàn) 二

2、義性 。在派生類中采用 虛基類 或 作用域分辨符 來消除該問題。2簡答題2.1 派生類如何實現(xiàn)對基類私有成員的訪問?2.2什么是類型兼容規(guī)則?2.3派生類的構(gòu)造函數(shù)是怎樣的執(zhí)行順序,析構(gòu)函數(shù)的執(zhí)行順序是如何實現(xiàn)的?2.4繼承與組合之間的區(qū)別與聯(lián)系是什么?2.5什么是虛基類?它有什么作用?含有虛基類的派生類的構(gòu)造函數(shù)有什么要求,什么是最遠派生類,建立一個含有虛基類的派生類的對象時,為什么由最遠派生類的構(gòu)造函數(shù)負責虛基類的初始化?3選擇題3.1下面對派生類的描述中,錯誤的是(D )。   A一個派生類可以作為另外一個派生類的基類   B派

3、生類至少有一個基類   C派生類的成員除了它自己的成員外,還包含了它的基類的成員   D派生類中繼承的基類成員的訪問權(quán)限到派生類中保持不變3.2下列對友元關(guān)系敘述正確的是(A)。   A不能繼承   B是類與類的關(guān)系   C是一個類的成員函數(shù)與另一個類的關(guān)系   D提高程序的運行效率3.3當保護繼承時,基類的(B)在派生類中成為保護成員,不能通過派生類的對象來直接訪問。   A任何成員

4、                   B公有成員和保護成員   C公有成員和私有成員            D私有成員3.4設(shè)置虛基類的目的是(B)。A簡化程序          

5、          B消除二義性    C提高運行效率                 D減少目標代碼3.5在公有派生情況下,有關(guān)派生類對象和基類對象的關(guān)系,不正確的敘述是( C )。     A派生類的對象可以賦給基類的對象  

6、   B派生類的對象可以初始化基類的引用     C派生類的對象可以直接訪問基類中的成員     D派生類的對象的地址可以賦給指向基類的指針3.6有如下類定義:class MyBASE  int k;public:  void set(int n) k=n; int get( ) const return k;class MyDERIVED: protected MyBASEprotected; int j

7、;public: void set(int m,int n)MyBASE:set(m);j=n; int get( ) constreturn MyBASE:get( )+j;則類MyDERIVED中保護成員個數(shù)是(B)。A4   B3   C2   D13.7程序如下:#include<iostream>using namespace std;class A public: A( ) cout<<”A”;class B public:B( ) cout<

8、<”B”; ;class C: public A B b;public: C( ) cout<<”C”;int main( ) C obj; return 0;執(zhí)行后的輸出結(jié)果是(D)。    ACBA   BBAC   CACB   DABC3.8類O定義了私有函數(shù)F1。P和Q為O的派生類,定義為class P: protected  O; class Q: public O。(C)可以訪問Fl。A O的對象  B

9、P類內(nèi)  C O類內(nèi)  D Q類內(nèi)3.9有如下類定義:class XAint x; public:  XA(int n) x=n; class XB: public XA int y; public: XB(int a,int b);在構(gòu)造函數(shù)XB的下列定義中,正確的是(B)。     AXB:XB(int a,int b):x(a),y(b)      BXB:XB(int a,int

10、 b):XA(a),y(b)      CXB:XB(int a,int b):x(a),XB(b)      DXB:XB(int a,int b):XA(a),XB(b) 3.10有如下程序:#include<iostream>using namespace std;class Baseprivate: void fun1( ) const cout<<”fun1”;protected: void fun2( ) const cout<<

11、;”fun2”;public: void fun3( ) const cout<<”fun3”;class Derived : protected  Basepublic: void fun4( ) const cout<<”fun4”;int main()  Derived obj; obj.fun1( );  / obj.fun2( );  / obj.fun3( );  / obj.fun4( );  /其中沒有語法錯誤的語句是(D )

12、。A   B   C    D4寫出程序運行結(jié)果4.l#include<iostream>using namespace std;class B1public: B1(int i) cout<<”constructing B1 “<<i<<endl;  B1( ) cout<<”destructing B1 “<<endl; class B2 public: B2( )

13、60;cout<<”constructing B3 *”<<endl;  B2( ) cout<<”destructing B3”<<endl; ;class C:public B2, virtual public B1  int j;public: C(int a,int b,int c):B1(a),memberB1(b) ,j(c)private: B1 memberB1; B2 memberB2;int main( ) C obj(1,2,3);  const

14、ructing B1 1constructing B3 *constructing B1 2constructing B3 *destructing B3destructing B1destructing B3destructing B14.2#include<iostream>using namespace std;class Bpublic: void f1()cout<<"B:f1"<<endl;class D:public Bpublic: void f1()cout<<"D:f1&quo

15、t;<<endl;void f(B& rb) rb.f1();int main( ) D d; B b,&rb1=b,&rb2=d; f(rb1); f(rb2); return 0; B:f1 B:f15編程題5.1定義一個Point類,派生出Rectangle類和Circle類,計算各派生類對象的面積Area()。#include<iostream>using namespace std;const double PI=3.14159;class Point pu

16、blic:  Point(double x=0, double y=0) X=x;Y=y; void ShowPoint() cout<<"("<< X<<","<<Y<<")"<<endl;private:  double X,Y;class Rectangle: public Point public:  Rectangle(double w,double h,double x,double y):Point(

17、x,y) width=w,height=h;Area();  void Area() area= width*height; void ShowArea()  cout<<"Rectangle Area="<<area<<endl; private:  double width,height,area;class Circle: public Point public:  Circle(double r,double x, double y):Point(x,

18、y) radius=r;Area();  void Area() area= PI*radius*radius; void ShowArea()  cout<<"Circle Area="<<area<<endl; private:  double radius,area;int main() Rectangle r(10,8,0,0); Circle c(4,3,5); r.ShowArea(); c.ShowArea();&#

19、160;return 0;5.2設(shè)計一個建筑物類Building,由它派生出教學樓Teach-Building和宿舍樓類Dorm-Building,前者包括教學樓編號、層數(shù)、教室數(shù)、總面積等基本信息,后者包括宿舍樓編號、層數(shù)、宿舍數(shù)、總面積和容納學生總?cè)藬?shù)等基本信息。#include<iostream>#include<cstring>using namespace std;enum AMPMAM=1,PM;class Buildingpublic:  Building(char *); void ShowBuilding()  

20、cout<<Name; protected:  char Name30;Building:Building(char *name) strcpy(Name,name);class Teach_Building: public Building public:  Teach_Building(char *,int,int,int,int); void ShowTeach_Building()  Building:ShowBuilding();  cout<<" No:&qu

21、ot;<<No;  cout<<" Floors:"<<Floors;  cout<<" ClassRooms:"<<ClassRooms;  cout<<" Area:"<<Area<<endl; protected: int No,Floors,ClassRooms,Area;Teach_Building:Teach_Building(char *name,

22、int no,int fl,int cr,int ar):Building(name) No=no;Floors=fl;ClassRooms=cr;Area=ar;class Dorm_Building:public Building public: Dorm_Building(char *,int,int,int,int,int); void ShowDorm_Building()  Building:ShowBuilding();  cout<<" No:"<<No; 

23、; cout<<" Floors:"<<Floors;  cout<<" DormRooms:"<<DormRooms;  cout<<" Area:"<<Area;  cout<<" StudentNum:"<<StudentNum<<endl; protected: int No,Floors,DormRooms,A

24、rea,StudentNum;Dorm_Building: Dorm_Building(char *name,int no,int fl,int dr,int ar,int sn):Building(name) No=no;Floors=fl;DormRooms=dr;Area=ar;StudentNum=sn;int main() Teach_Building tb("主教學樓",59,6,66,18000); Dorm_Building db("北苑男生宿舍",41,5,75,3750,300); t

25、b.ShowTeach_Building(); db.ShowDorm_Building(); return 0;5.3定義并描述一個Table類和一個Circle類,由它們共同派生出RoundTable類。(這題做得不太滿意)#include<iostream>using namespace std;class Tablepublic:  Table(int legs)  Legs=legs; protected:  int Legs;class Circlepublic: Circle(int ra

26、dius)  Radius=radius; protected: int Radius;class RoundTable:public Table,public Circlepublic: RoundTable(int legs,int radius):Table(legs),Circle(radius)protected:;int main() return 0;5.4利用第四章習題5.2 Clock類,派生一個帶“AM”、“PM”的新時鐘類NewClock。#include<iostream>using namespa

27、ce std;enum AMPMAM=1,PM;class Clockpublic:  Clock(int=0, int=0, int s=0); void ShowTime()  cout<<Hour<<":"<<Minute<<":"<<Second; private:  int Hour,Minute,Second;Clock:Clock(int h, int m, int s) Hour=h;Minute=m;Seco

28、nd=s;class NewClock: public Clock public:  NewClock(); NewClock(Clock c,AMPM ap):Clock(c)  Ap=ap;  void ShowTime()  Clock:ShowTime();  cout<<(Ap=AM ? " AM": " PM")<<endl; private:  AMPM Ap;int main() New

29、Clock nc(Clock(8,23,34),AMPM(2); nc.ShowTime(); return 0;5.5利用NewClock類與Date類定義一個帶日期的時鐘類 ClockwithDate。對該類對象能進行增加減少秒數(shù)操作。#include<iostream>using namespace std;enum AMPMAM=1,PM;class Clockpublic:  Clock(int=0, int=0, int s=0); void ShowTime()  cout<<Hour<&l

30、t;":"<<Minute<<":"<<Second; protected:  int Hour,Minute,Second;Clock:Clock(int h, int m, int s) Hour=h;Minute=m;Second=s;class NewClock: public Clock public:  NewClock(Clock c,AMPM ap):Clock(c)  Ap=ap;  void ShowTime()

31、0; Clock:ShowTime();  cout<<(Ap=AM ? " AM": " PM")<<endl; protected: AMPM Ap;class Dateprotected: int Year,Month,Day; static const int days; bool LeapYear(); bool EndofMonth();public: Date(int=1900,int=1,int =1); 

32、void Increment(int ); void Decrement(int); void SetDate(int,int,int); void ShowDate();const int Date:days=0,31,28,31,30,31,30,31,31,30,31,30,31;Date:Date(int y,int m,int d) SetDate(y,m,d);void Date:SetDate(int y,int m,int d) Year=(y>=1900 && y<=9999)?y:1900;

33、60;Month=(m>=1 &&m<=12)?m:1; if(Month=2 && LeapYear()  Day=(d>=1 && d<=29)?d:1; else  Day=(d>=1 && d<=daysMonth)?d:1;bool Date:LeapYear() return (Year%400 = 0) | (Year%4=0 && Year%100!=0)? true:false;bool Da

34、te:EndofMonth() if(Month=2 && LeapYear()  return Day=29; else  return Day=daysMonth;void Date:Increment(int n) int i; for(i=1;i<=n;i+) if(EndofMonth() && Month=12)  Year+; Month=Day=1;  else if(EndofMonth() 

35、; Month+;Day=1;  else  Day+;void Date:Decrement(int n) int i; for(i=1;i<=n;i+) if(Day=1)  if(Month=1)   Year-; Month=12; Day=31;    else if(Month=3)   Day=LeapYear()?29:28;Month=2;   

36、; else   Day=days-Month;  else  Day-;void Date:ShowDate() cout<<Year<<"-"<<Month <<"-"<<Day <<endl;class ClockwithDate :public Date,public NewClockpublic: ClockwithDate(Date,Clock,AMPM); vo

37、id IncrementSecond(int); void DecrementSecond(int); void ShowDateandTime()  Date:ShowDate();  NewClock:ShowTime (); ClockwithDate:ClockwithDate(Date d,Clock c,AMPM ap):Date(d),NewClock(c,ap)void ClockwithDate:IncrementSecond(int n) int i; for(i=1;i<=n;i+)  Second+;  if(Second=60)  

溫馨提示

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

評論

0/150

提交評論