類和物件練習題

2023-01-19 11:21:04 字數 3717 閱讀 2337

第8章類與物件

8.1知識要點

1.掌握類與物件的概念和定義方法,掌握類成員的訪問屬性。

2.掌握建構函式的概念、定義方法和使用方法。

3.掌握析構函式的概念、定義方法和使用方法。

4.掌握拷貝建構函式的概念、定義方法和使用方法。

5.掌握包含物件成員的類建構函式的定義方法。

6.掌握靜態成員的概念、定義方法、作用和特點。

7.掌握友元的概念、定義方法、作用和特點。

8.掌握類模板的定義格式與使用方法。

8.2典型例題分析與解答

例題1:下列有關類的說法不正確的是( )。

a.物件是類的乙個例項

b.任何乙個物件只能屬於乙個具體的類

c.乙個類只能有乙個物件

d. 類與物件的關係和資料型別與變數的關係相似

答案:c

分析:物件是類的乙個例項,類與物件的關係和資料與變數的關係相似,所以乙個類可以有多個物件。

例題2:下面( )項是對建構函式和析構函式的正確定義。

a.void x::x(), void x::~x()

b.x::x(引數),x::~x()

c.x::x(引數),x::~x(引數)

d.void x::x(引數),void x::~x(引數)

答案:b

分析建構函式無返回型別、可帶引數、可過載;析構函式無返回型別、不可帶引數、不可過載。

例題3:( )的功能是物件進行初始化。

a.析構函式b. 資料成員 c.建構函式 d.靜態成員函式

答案:c

分析:當乙個物件定義時,c++編譯系統自動呼叫建構函式建立該物件並進行初始化;當乙個物件的生命週期結束時,c++編譯系統自動呼叫析構函式登出該物件並進行善後工作;

例題4:下列表達方式正確的是( )。

a.class p; }

c. class p; int a;

f=25; void seta (int x)

答案:d

分析:在類體內不可對資料成員進行初始化;類定義結束時需用分號;只有類中的成員函式才能訪問類中的私有資料。

例題5: 拷貝建構函式具有的下列特點中,( )是錯誤的。

a.如果乙個類中沒有定義拷貝建構函式時,系統將自動生成乙個預設的

b.拷貝建構函式只有乙個引數,並且是該類物件的引用

c.拷貝建構函式是一種成員函式

d. 拷貝建構函式的名字不能用類名

答案:d

分析:如果乙個類中沒有定義拷貝建構函式時,系統將自動生成乙個預設的;拷貝建構函式只有乙個引數,並且是該類物件的引用;拷貝建構函式的名字與類同名,並且不被指定返回型別;拷貝建構函式是一種成員函式。

例題6:關於靜態成員的描述中,( )是錯誤的。

a.靜態成員可分為靜態資料成員和靜態成員函式

b.靜態資料成員定義後必須在類體內進行初始化

c.靜態資料成員初始化不使用其建構函式

d.靜態資料成員函式中不能直接引用非靜態成員

答案:b

分析:靜態成員可分為靜態資料成員和靜態成員函式;靜態資料成員被定義後,必須對它進行初始化,初始化在類體外進行,一般放在該類的實現部分最合適,也可以放在其他位置,例如,放在主函式前面等;靜態資料成員初始化與該類的建構函式和析構函式無關;在靜態成員函式的實現中,可以直接引用靜態成員,但不能直接引用非靜態成員。

例題7:關於友元的描述中,( )是錯誤的。

a.友元函式是成員函式,它被說明在類體內

b. 友元函式可直接訪問類中的私有成員

c. 友元函式破壞封裝性,使用時盡量少用

d. 友元類中的所有成員函式都是友元函式

答案:a

分析:友元函式是非成員函式,在類體內說明了,在類體外定義,定義和呼叫等同於一般的普通函式;由於它可以直接訪問類的私有成員,因此破壞了類的封裝性和隱藏性,盡量少用。

例題8:設有如下程式結構:

class box

;void main()

該程式執行時呼叫 (1) 次建構函式;呼叫 (2) 次析構函式。

答案:(1)3(2)3

分析:每建立乙個物件自動呼叫一次建構函式,在這裡建立了a、b、c三個物件,所以共呼叫了三次建構函式;每釋放乙個物件,系統自動呼叫一次析構函式,a、b、c物件釋放時,分別呼叫析構函式,所以析構函式共呼叫了三次。

例題9:設a為test類的物件且賦有初值,則語句test b(a); 表示。

答案:將物件a複製給物件b。

分析:執行test b(a);語句相當於呼叫了預設複製建構函式,將a物件的屬性複製給b物件。

例題10:利用「物件名.成員變數」形式訪問的物件成員僅限於被宣告為 (1)的成員;若要訪問其他成員變數,需要通過 (2) 函式或 (3) 函式。

答案:(1) public (2) 成員函式 (3)友元函式

分析:類體內的資料成員可宣告為公有的、私有的和保護的,公有的資料成員可利用「物件名.成員變數」形式來進行訪問;私有的資料成員能被類中的其他成員函式或友元函式所呼叫;保護的資料成員可以在類體中使用,也可以在派生類中使用,但不能在其他類外通過物件使用。

例題11:分析找出以下程式中的錯誤,說明錯誤原因,給出修改方案使之能正確執行。

#include<>

class one

;void main()

分析:出錯原因:建構函式參數列語法錯;建構函式沒有函式體;類的物件不能直接訪問類的私有成員變數。

改正後的程式如下:

#include<>

class one

int geta1()

int geta2()

};void main()

例題12:分析以下程式的錯誤原因,給出修改方案使之能正確執行。

#include <>

class amplifier

float gain();

};amplifier::float gain()

void main()

分析:成員函式在類體外定義格式是:函式返回型別類名::成員函式名(參數列);成員函式呼叫格式是:物件名.成員函式名(參數列)。

改正後的程式如下:

#include <>

class amplifier

float gain();

};float amplifier::gain()

void main()

例題13:下列程式的執行結果是 。

#include <>

class point

point(point &p);

friend point move(point q);

~point()

int getx()

int gety()

};point::point(point &p)

point move(point q)

void main()

分析:根據建構函式、拷貝建構函式和友元函式的特點,執行該程式後,輸出結果是:

calling the constructor function.

calling the constructor function.

calling the copy_initialization constructor function.

calling the copy_initialization constructor function.

ok!calling the constructor function.

calling the copy_initialization constructor function.

類圖練習題

專題三 類圖 物件圖 一 單項選擇題 1 在uml中,類之間的關係有一種為關聯關係,其中多重性用來描述類之間的對應關係,下面哪個不是其中之一 a.0 1 b.0 c.1 d.2 通常物件有很多屬性,但對於外部物件來說某些屬性應該不能被直接訪問,下面哪個不是uml中的類成員訪問限定性 a.公有的 pu...

C類和物件

1.物件導向設計簡介 1 2.物件的初始化與清除 物件賦值 6 2.1.建構函式 6 2.2.初始化成員列表 引數初始化表 9 2.3.析構函式 10 3.物件與常量 10 4.靜態成員 11 5.友員 12 5.1.友員函式 12 5.2.友員成員函式 13 5.3.友員類 13 物件導向程式設計...

類與物件部分習題

一.基本概念與基礎知識自測題 1 填空題 1 引入類定義的關鍵字是 1 類的成員函式通常指定為 2 類的資料成員通常指定為 3 指定為 4 的類成員可以在類物件所在域中的任何位置訪問它們。通常用類的 5 成員表示類的屬性,用類的 6 成員表示類的操作。答案 1 class 2 公有的public 3...