一、填空題
(1)如類果類a繼承了b,那麼類a被稱為
基類,而類b被稱為
派生類。
(2)c++的兩種繼承為:
單繼承和
多繼承。
(3)在預設情況下的繼承方式為
私有繼承方式
。(4)從基類中公有派生乙個類時,基類的公有成員就成為派生類的
公有 成員,而這個基類的保護成員就成為派生類的
保護成員。
(5)c++提供了
多繼承機制,允許乙個派生類可以繼承多個基類,甚至這些基類是互不相關的。
(6)類x中的名字n 支配類y中同名的名字n,是指類x以類y為它的乙個基類,這稱為
支配規則
。(7)引進虛基類的目的是
解決二義性
。(8)在乙個繼承結構中,解決二義性的方法有
使用作用域運算子
和
引進虛基類
。二、選擇題(至少選乙個,可以多選)
(1)c++語言建立類族是通過( b )。
a.類的巢狀 b.類的繼承 c.虛函式 d.抽象類
(2) 繼承是( cd )的方法。
a.將特殊的類變成通用的類
b.將通用的引數傳送給特殊的類的物件
c.將通用的類變成特殊的類
d.將已有的類新增新的特性,但不重寫它們
(3)繼承的優點是( abc )。
a.擴大類的使用範圍,更便於使用類庫
b.避免重寫程式**,提供有用的概念框架
c.把類轉化成有條理的層次結構
d.通過繼承的自然選擇和重寫使類進一步拓展
(4)下面敘述不正確的是( c )。
a.基類的保護成員在保護派生類中仍然是保護的
b.基類的保護成員在公有派生類中仍然是保護的
c.基類的保護成員在私有派生類中仍然是保護的
d.對基類的保護成員的訪問必須是無二義性的
(5)派生類的物件對它的基類成員中( a )是可以訪問的。
a.公有繼承的公有成員
b.公有繼承的私有成員
c.公有繼承的保護成員
d.私有繼承的公有成員
(6)( c )是可以訪問類物件的私有資料成員的。
a.該類的物件
b.該類友元類派生的成員函式 c.類中的友元函式 d.公有派生類的成員函式
(7)多繼承是( b )。
a.多個單繼承的疊加
b.派生類有多個直接基類
c.多個派生類有唯一的基類
d.每個派生類最多只有乙個直接基類,但它可以有多個間接基類
(8)關於多繼承二義性的描述,( d )是錯誤的。
a.派生類的多個基類中存在同名成員時,派生類對這個成員訪向可能出現二義性
b.由於二義性原因,乙個類不能從同乙個類中一次以上直接繼承
c.使用作用域運算子對成員進行限制可以解決二義性
d.派生類和它的基類中出現同名函式時,派生類對這個成員函式的訪問可能出現二義性
(9) 作用域運算子通常用來( ad )。
a.指定特定的類
b.指明從哪乙個基類中匯出來的
c.在某些成員函式中限定靜態變數的可視範圍
d.解決二義性
(10)多繼承派生類析構函式釋放物件時,( a )被最先呼叫。
a.派生類自己的析構函式
b.基類的析構函式
c.根基類的析構函式
d.派生類中子物件類的析構函式
三、判斷題
(1)增加乙個基類的派生類,需要對基類進行根本改變。(錯)
(2)如果沒有為派生類指定建構函式,則派生類的物件會呼叫基類的建構函式。(對)
(3)對乙個類來說,可能的訪問許可權為: private.public.protected 和不可訪問。(錯)
(4)無論哪種派生方式,基類中的私有成員在派生類中都是不可訪問的。(對)
(5)在派生過程中,派生類繼承包括建構函式和析構函式在內的所有基類成員。(錯)
(6) 在單繼承中,派生類物件對基類成員函式的訪問也可能出現二義性。(錯)
四、筒答題
(1)在物件導向技術中,類與類之間的關係如何表示?
答:在物件導向技術中,類是資料和操作的集合,它們之間主要有3中關係:has-a、uses-a和is-a。
has-a表示類的包含關係,用以描述乙個類由多個「部件類」構成。在物件導向技術中,實現has-a關係用類成員表示,即第3章中已學的子物件。
uses-a表示乙個類部分地使用另乙個類。在物件導向技術中,這種關係通過類之間成員函式的相互聯絡或物件引數傳遞實現。另外,通過定義友元也能實現這種關係。
is-a表示一種分類方式,描述類的抽象和層次關係。
(2)簡述賦值相容規則。
答:所謂賦值相容規則是指在公有繼承情況下,乙個派生類的物件可以作為基類的物件來使用。具體來說,就是下面3種情況:
①派生類的物件可以賦給基類的物件。
②派生類的物件可以初始化基類的引用。
③派生類的物件的位址可以賦給指向基類的指標。
(3)簡述在 3 種繼承方式下基類成員的訪問許可權。
答:當類的繼承方式為公有繼承時,在派生類中,基類的公有成員和保護成員被繼承後分別作為派生類的公有成員和保護成員,這樣使得派生類的成員函式可以直接訪問它們,而派生類的成員函式無法直接訪問基類的私有成員。 在類外部,派生類的物件可以訪問繼承下來的基類公有成員。
當類的繼承方式為私有繼承時,在派生類中,基類的公有成員和保護成員作為派生類的私有成員,派生類的成員函式可以直接訪問它們,而派生類的成員函式無法直接訪問基類的私有成員。在類外部,派生類的物件無法訪問基類的所有成員。
當類的繼承方式為保護繼承時,在派生類中,基類的公有成員和保護成員作為派生類的保護成員,派生類的成員函式可以直接訪問它們,而派生類的成員函式無法直接訪問基類的私有成員。在類外部,派生類的物件無法基類的所有成員。
(4)簡述在繼承方式下建立派生類物件時,構造函式呼叫順序,以及刪除派生類物件時派生類析構函式的呼叫順序。
答:建立派生類物件時構造函式呼叫順序:首先呼叫基類建構函式,子物件所在類建構函式次之,最後執行派生類建構函式。
刪除派生類物件時派生類析構函式的呼叫順序:先呼叫派生類的析構函式;再呼叫派生類中子物件類的析構函式;再呼叫普通基類的析構函式;最後呼叫虛基類的析構函式。
(5) 簡述派生類建構函式的規則。
答:第1種情況:若派生類有建構函式而基類沒有,當建立派生類的物件時,派生類相應的建構函式會被自動呼叫。
第2種情況:若派生類沒有建構函式而基類有,則基類必須擁有預設的建構函式。只有這樣,當建立派生類的物件時,才能自動呼叫基類的預設建構函式。
第3種情況:若派生類有建構函式,且基類有預設建構函式,則建立派生類的物件時,基類的預設建構函式會自動呼叫,除非當前被呼叫的派生類建構函式在其初始化列表中顯示呼叫了基類的有參建構函式。
第4種情況:若派生類和基類都有建構函式,但基類沒有預設建構函式,則派生類的每乙個建構函式必須在其初始化列表中顯示呼叫基類的某個建構函式。只有這樣,當建立派生類的物件時,基類的建構函式才能獲得執行機會。
五、程式分析題(寫出程式的輸出結果)
#includeusing namespace std;
class a
void move(int x,int y)
void disp()
void displayxy()
{ cout<
cout<
執行結果如下:
第四章習題
一。填空題 1 基 派生 2 單繼承 多繼承 3 私有繼承方式 4 公有 保護 5 多繼承 6 支配原則 7 解決二義性 8 使用作用域運算子 引進虛基類 二。選擇題 1 5 b cd abc c a 6 10 c b d ad a 三。判斷題 f t f t f f 四。簡答題 1.在物件導向技術...
C 第四章習題
1 定義乙個複數類complex,過載運算子 使之能用於複數的加法運算。將運算子函式過載為非成員 非友元的普通函式。程式設計序,求兩個複數之和。2 定義乙個複數類complex,過載運算子 使之能用於複數的加減乘除。運算子過載函式作為complex類的成員函式。程式設計序,分別求兩個複數之和 差 積...
第四章課後習題
第四章處理器體系結構,看了蠻久的。內容倒是挺多的,首先這章將彙編指令轉化為二進位制 然後又研究了下y86命令集下彙編指令的微實現。然後就開始了處理器的實現。處理器的實現,則是首先從seq的順序實現出發,然後講解了5個環節的控制邏輯的實現。之後則是流水線的實現,流水線的實現無非就是各個狀態的 但是比較...