c 基礎五個題(三)

2022-08-05 07:18:09 字數 938 閱讀 2208

一。乙個物件訪問普通函式和虛函式的時候,哪乙個更快?

訪問普通函式更快,因為普通成員函式在編譯階段已經被確定,因此在訪問時直接呼叫對應位址的函式,而虛函式在呼叫時,需要首先在虛函式表中查詢虛函式所在的位址,因此比普通函式要慢一些。

二。什麼情況之下,需要析構函式是虛函式?

首先存在類繼承並且析構函式確實析構了一些資源,這樣當父類指標指向子類物件時,析構的時候只會釋放父類的析構函式,而不會呼叫子類的析構函式,這樣就會造成記憶體洩露。

三。內聯函式,建構函式,靜態成員函式可以是虛函式嗎?

都不可以,內聯函式需要在編譯階段展開,但是虛函式是在執行時動態繫結的,編譯時無法展開,建構函式在進行呼叫時還不存在父類與子類的概念,父類只會呼叫父類的建構函式,子類呼叫子類的,因此不存在動態繫結的概念,靜態成員函式是以類為單位的函式,與具體物件無關(無this指標),虛函式是與物件的動態繫結,因此是兩個不衝突的概念。

四。建構函式可以呼叫析構函式嗎?

可以呼叫,但是並沒有任何意義,父類呼叫的仍然是父類版本的建構函式,子類呼叫的是子類版本的建構函式。

五。c++中虛繼承的作用以及底層實現原理

虛繼承:顧名思義就是在被繼承的類前面加上virtual關鍵字,這時候被繼承的類稱為虛基類。例如:

class base;

class b1:virtual public base;

class b2:virtual public base;

class b3:public b1,public b2;

以上用到了base中的某個成員就不會產生二義性。一般通過虛基類指標實現,即各物件中只儲存乙份父類的物件,多繼承時通過虛基類指標引用該公共物件,從而避免了菱形繼承中二義性問題。

1.上例b3儲存的就是b2物件的值,如果class b3:public b2,public b1;儲存的就是b1物件的值

2.如果去掉virtual那麼編譯出錯,提示二義性錯誤

c 基礎五個題(一)

一.深拷貝和淺拷貝?淺拷貝是指源物件與拷貝物件共用乙份實體,僅僅是引用的變數不同 僅僅是名稱不同 對其中任何乙個物件的改動都會影響另外乙個物件,例如 乙個人叫小王,後來改名小李,結果不管是小王死了還是小李死了,都是這個人死了 深拷貝 源物件與拷貝物件獨立,其中任何乙個物件的改動都不會對另外乙個物件造...

C語言基礎訓練題 五

實現乙個函式,列印乘法口訣表,口訣表的行數和列數自己指定,輸入9,輸出99口訣表,輸入12,輸出1212的乘法口訣表。使用函式實現兩個數的交換。實現乙個函式判斷year是不是閏年。建立乙個陣列,實現函式init 初始化陣列 實現empty 清空陣列 實現reverse 函式完成陣列元素的逆置。要求 ...

五個遞迴題總結

當然,很多遞迴都是可以優化的,比如f n f n 1 f n 2 這裡f n 2 就會計算兩次,可以用雜湊表儲存已經計算的資料,但是這裡主要演示遞迴思想,不再進行優化。週末你帶著女朋友去電影院,女朋友問你,咱們現在坐在第幾排啊,電影院太黑沒法數怎麼辦,於是你問前一排的人他是第幾排,你只需要在他的數字...