1. 程式人生 > >《劍指offer》第二章——關於面試官王海波的思考

《劍指offer》第二章——關於面試官王海波的思考

一、C++基礎知識
1.面向物件的特性:封裝、繼承和多型。

所謂封裝,就是把客觀事物封裝成抽象的類,並且類可以把自己的資料和方法只讓可信的類或者物件操作,對不可信的進行資訊隱藏。簡單的說,一個類就是一個封裝了資料以及操作這些資料的程式碼的邏輯實體。

所謂繼承,是指可以讓某個型別的物件獲得另一個型別的物件的屬性的方法。繼承概念的實現方式有兩類:實現繼承與介面繼承。實現繼承是指直接使用基類的屬性和方法而無需額外編碼的能力;介面繼承是指僅使用屬性和方法的名稱、但是子類必須提供實現的能力。

所謂多型,就是向不同物件傳送同一個訊息,不同的物件在接收時會產生不同的行為(即方法)。

2.建構函式和解構函式

所謂建構函式,主要作用是用於初始化物件的資料成員。建構函式的名稱必須與類名相同。如果沒有定義任何建構函式,則C++會自動提供一個預設建構函式。

所謂解構函式,就是用來釋放或返還生命週期即將結束的類物件所佔據的資源。解構函式與建構函式是相對立或互補的,建構函式獲取資源,解構函式釋放資源。

3.靜態繫結和動態繫結

靜態型別,指的是物件(指標、引用)在宣告時的型別。
動態型別,指的是當前物件(包括指標和引用)實際指向的型別。

靜態繫結,繫結的是物件的靜態型別,某特性(比如函式)依賴於物件的靜態型別,發生在編譯期。

動態繫結,繫結的是物件的動態型別,某特性(比如函式)依賴於物件的動態型別,發生在執行期。

在C++的繼承關係中,指標或引用的動態型別與靜態型別可以不同,這是C++實現多型的關鍵。

借用兩句話:
只有虛擬函式才使用的是動態繫結,其他的全部是靜態繫結。
絕不重新定義繼承而來的預設引數。

C++之面向物件的三個基本特徵
深入理解C++的動態繫結和靜態繫結