c/c++面試題目

問題一:定義了一個類,其指針成員是用new來初始化的,請指出可能出現的三個問題及其解決方法:

答:

首先,當這種類型的對象過期時,對象的成員指針指向的數據仍將保留在內存中,這將佔用空間,同時不可訪問,因爲指針已經丟失。可以讓類析構函數刪除構造函數中new分配的內存,來解決這種問題。

其次,析構函數釋放這種內存後,如果程序將這樣的對象初始化爲另一個對象,則析構函數將試圖釋放這些內存兩次。這是因爲將一個對象初始化爲另一個對象的默認初始化,將複製指針值,但不復制指向的數據,這將使兩個指針指向相同的數據。解決方法是,定義一個複製構造函數,使初始化複製指向的數據。

第三,將一個對象賦給另一個對象也將導致兩個指針指向相同的數據。解決方法是重載賦值運算符,使之複製數據,而不是指針。

問題二:靜態成員和靜態成員函數的總結:

一、靜態成員的特點: 

(1)static數據成員在類的內部聲明,但只能在類的外部定義,在類的外部不能指定static,在類的定義時候進行初始化; 

(2)static數據成員只能在類的外部進行初始化(特例:當整型const static數據成員被常量表達式初始化時,就可以在類的內部進行初始化,但還需要在外部進行定義)。 

(3) static數據成員可以是該成員所屬的類類型,而非static數據成員只能自身類的引用或者指針。 
(4) static數據成員可以用作類成員函數的默認實參。 
(5) static數據成員的值可以改變。 

二、靜態成員和非靜態成員的區別: 

(1) 靜態變量使用 static 修飾符進行聲明,在類被實例化時創建,通過類和對象都可以進行訪問; 
(2)不帶有 static 修飾符聲明的變量稱做非靜態變量,在對象被實例化時創建,通過對象訪問; 
(3) 一個類的所有實例的同一靜態變量都是同一個值,同一個類的不同實例的同一非靜態變量可以是不同的值。 
(4) 靜態函數的實現裏不能使用非靜態成員,如非靜態變量、非靜態函數等。 

三、靜態成員函數的特點: 

(1) static 成員函數沒有 this 形參,它可以訪問所屬類的 static 成員,但不能訪問非 static 成員。 
(2)static成員函數既可以在類的內部定義,也可以在類的外部定義,在外部定義時,不能重複指定static保留字。 
(3)static成員函數不能聲明爲虛函數,不能實現動態綁定 
(4)static 成員函數不能聲明爲const,因爲const是針對this是不是const而言的 
(5)構造函數、析構函數不能爲靜態函數。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章