習題7及其解答(第二版)(共8頁)_第1頁
習題7及其解答(第二版)(共8頁)_第2頁
習題7及其解答(第二版)(共8頁)_第3頁
習題7及其解答(第二版)(共8頁)_第4頁
習題7及其解答(第二版)(共8頁)_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質文檔-傾情為你奉上第7章 繼承習題77.1 選擇題1在c+中,類之間的繼承關系具有( c )。(a) 自反性 (b) 對稱性 (c) 傳遞性 (d) 反對稱性2下列關于類的繼承描述中,( d )是正確的。(a) 派生類公有繼承基類時,可以訪問基類的所有數據成員,調用所有成員函數(b) 派生類也是基類,所以它們是等價的(c) 派生類對象不會建立基類的私有數據成員,所以不能訪問基類的私有數據成員(d) 一個基類可以有多個派生類,一個派生類可以有多個基類3當一個派生類公有繼承一個基類時,基類中的所有公有成員成為派生類的( a )。(a) public成員(b)private成員(c) pro

2、tected成員(d)友員4當一個派生類私有繼承一個基類時,基類中的所有公有成員和保護成員成為派生類的( b )。(a) public成員(b)private成員(c) protected成員(d)友員5當一個派生類保護繼承一個基類時,基類中的所有公有成員和保護成員成為派生類的( c )。(a) public成員(b)private成員(c) protected成員(d)友員6不論派生類以何種方式繼承基類,都不能直接使用基類的( b )。(a) public 成員(b)private成員(c) protected成員(d)public 成員和protected成員7下面描述中,錯誤的是( d

3、)。(a) 在基類定義的public成員在公有繼承的派生類中可見,也能在類外被訪問(b) 在基類定義的protected成員在私有繼承的派生類中可見(c) 在基類定義的靜態(tài)成員在私有繼承的派生類中可見(d) 訪問聲明可以在公有繼承派生類中把基類的public成員聲明為private成員8在c+中,可以被派生類繼承的函數是( a )。(a) 成員函數(b)構造函數(c) 析構函數(d)友員函數9在創(chuàng)建派生類對象時,構造函數的執(zhí)行順序是( d )。(a) 對象成員構造函數、基類構造函數、派生類本身的構造函數(b) 派生類本身的構造函數、基類構造函數、對象成員構造函數(c) 基類構造函數、派生類本身

4、的構造函數、對象成員構造函數(d) 基類構造函數、對象成員構造函數、派生類本身的構造函數10當不同的類具有相同的間接基類時,有特點( c )。(a) 各派生類對無法按繼承路線產生自己的基類版本(b) 為了建立惟一的間接基類版本,應該聲明間接基類為虛類(c) 為了建立惟一的間接基類版本,應該聲明派生類虛繼承基類(d) 一旦聲明虛繼承,基類的性質就改變了,不能再定義新的派生類7.2 閱讀下列程序,寫出執(zhí)行結果1#include <iostream.h>class Base public: void get( int i,int j,int k,int l ) a = i; b = j;

5、 x = k; y = l; void print() cout << "a = "<< a << 't' << "b = " << b << 't' << "x = " << x << 't' << "y = " << y << endl; int a,b;protected:int x, y;class A: public

6、 Base public:void get( int i, int j, int k, int l ) Base obj3; 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; void print() cout << "a = " << a << 't' << "b = " << b << '

7、;t'<< "x = " << x << 't' << "y = " << y << endl; cout << "u = " << u << 't' << "v = " << v << endl;private: int u, v ;void main() Base obj1; A obj2;obj1.get( 10, 20, 30

8、, 40 ); obj2.get( 30, 40, 50, 60 ); obj1.print(); obj2.print(); 【答案】a = 50 b = 60 x = 70 y = 80a = 10 b = 20 x = 30 y = 40a = 30 b = 40 x = 50 y = 60u = 120 v = 702. #include <iostream.h>class Base1 public: Base1( int i ) cout << "調用基類Base1的構造函數:" << i << endl ; ;cl

9、ass Base2 public: Base2( int j ) cout << "調用基類Base2的構造函數:" << j << endl ; ; class A: public Base1, public Base2 public:A( int a, int b, int c, int d ) : Base2(b), Base1(c), b2(a), b1(d) cout << "調用派生類A的構造函數:" << a+b+c+d << endl; private: Base1

10、b1; Base2 b2; ; void main() A obj( 1, 2, 3, 4 ); 【答案】調用基類BASE1的構造函數:3 調用基類BASE2的構造函數:2 調用基類BASE1的構造函數:4調用基類BASE2構造函數:1調用派生類A的構造函數:103 #include <iostream.h>class A public: A(int i, int j) a=i; b=j ; void Add(int x, int y) a+=x; b+=y; void show() cout<<"("<<a<<")

11、t("<<b<<")n" private: int a, b;class B : public A public:B(int i, int j, int m, int n):A(i,j),x(m),y(n)void show() cout<<"("<<x<<")t("<<y<<")n" void fun() Add(3,5); void ff() A:show(); private: int x, y ;void main

12、() A a(1,2); a.show(); B b(3,4,5,6); b.fun(); b.A:show(); b.show(); b.ff();【答案】(1) (2)(6) (9)(5) (6)(6) (9)4 #include<iostream.h>class A public: A(const char *s)cout<<s<<endl; A();class B : virtual public A public: B(const char *s1, const char *s2):A(s1) cout << s2 << e

13、ndl ; ;class C : virtual public A public: C(const char *s1, const char *s2):A(s1) cout << s2 << endl ; ;class D : public B, public C public: D(const char *s1,const char *s2,const char *s3,const char *s4) : B(s1,s2),C(s1,s3),A(s1) cout << s4 << endl ; ;void main() D *ptr = new

14、 D("class A","class B","class C","class D"); delete ptr;【答案】class Aclass Bclass Cclass D7.3 思考題1 函數和類兩種程序模塊都可以實現(xiàn)軟件重用,它們之間有什么區(qū)別?2請按照類成員的訪問特性、類層次的繼承特點,做出一張表格,總結各種類成員在基類、派生類中的可見性和作用域。3 若有以下說明語句:class A private: int a1;public: int a2; double x; /*/ ;class B : priv

15、ate A private: int b1; public int b2; double x; /*/ ;B b ; 對象b將會生成什么數據成員?與繼承關系、訪問特性、名字有關嗎?4若有以下說明語句:class A /*/ public : void sameFun(); ;class B : public A /*/ public : void sameFun(); ;void comFun() A a ; B b ; /*/(1) 若在B:sameFun中要調用A:sameFun,語句形式如何?它將在什么對象上操作?(2) 在comFun中可以用什么方式調用A:sameFun和B:same

16、Fun?語句形式如何?它們將可以在什么對象上操作?5“虛基類”是通過什么方式定義的?如果類A有派生類B,C,D,類A是類B和類C的虛基類,那它也一定是類D的虛基類嗎?為什么?6在具有虛繼承的類體系中,建立派生類對象時以什么順序調用構造函數?請用簡單程序說明,并上機驗證你的分析。7.4 編程題1定義一個Rectangle類,它包含兩個數據成員length和width;以及包含用于求長方形面積的成員函數。再定義Rectangle的派生類Rectangular,它包含一個新數據成員height和用來求長方體體積的成員函數。在main函數中,使用兩個類,求某個長方形的面積和某個長方體的體積?!窘獯稹?

17、include<iostream.h>class rectanglepublic: rectangle( float l,float w ) length = l;width = w; float area() return( length*width ); float getlength() return length; float getwidth() return width; private: float length; float width;class rectangular:public rectangle public: rectangular( float l,f

18、loat w,float h ) : rectangle( l,w ) height = h; float getheight() return height; float volume() return area() *height; private: float height;void main() rectangle obj1( 2,8 ); rectangular obj2( 3,4,5 ); cout << "length=" << obj1.getlength() << 't' << "w

19、idth=" << obj1.getwidth() << endl; cout << "rectanglearea=" << obj1.area() << endl; cout << "length=" << obj2.getlength() << 't' << "width=" << obj2.getwidth(); cout << 't'<< &q

20、uot;height=" << obj2.getheight() << endl; cout << "rectangularvolume=" << obj2.volume() << endl;2. 假設某銷售公司有銷售經理和銷售員工,月工資的計算辦法是:銷售經理的固定月薪為8000元并提取銷售額的5/1000作為工資;銷售員工只提取銷售額的5/1000作為工資。編一程序,定義一個基類Employee,它包含三個數據成員number、name和salary,以及用于輸入編號和姓名的構造函數。由Employe

21、e類派生Salesman類,再由Salesman類派生Salesmanager類。Salesman類包含兩個新數據成員 commrate和sales,還包含用于輸入銷售額并計算銷售員工工資的成員函數pay()和用于輸出的成員函數print()。Salesmanager類包含新數據成員 monthlypay,及用于輸入銷售額并計算銷售經理工資的成員函數pay()、用于輸出的成員函數print()。在main函數中,測試你的類結構,求若干個不同員工的工資。【解答】#include <iostream.h>#include <string.h>class employeepu

22、blic: employee() cout << "編號:" cin >> number; cout <<"姓名:" cin >> name; salary = 0; protected: char number5; char name10; double salary;class salesman: public employeepublic: salesman() commrate = 0.005; void pay() cout << name << "本月銷售額:&

23、quot; ; cin >> sales; salary = sales*commrate; void print() cout << "銷售員 :" << name << "編號:" << number << "本月工資:" << salary << endl; protected:double commrate;double sales;class salesmanager: public salesmanpublic: salesmanager() monthlypay = 8000; commrate = 0.005; void pay() cout << name <<"本月部門銷售額:" ; cin >> sales; salary = monthlypay + sales*commrate; void

溫馨提示

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

評論

0/150

提交評論