面試中有關C 的若干問題

2022-07-17 09:57:07 字數 1590 閱讀 7001

面試中有關c++的若干問題

by 晴天, 2014.5.16晚

什麼是多型?簡要說一下c++中的多型的概念。

(1)定義:多型是指相同物件收到不同訊息或者不同物件收到相同訊息產生不同的行為。

(2)c++中多型分為兩種

a) 編譯時多型(靜態繫結)

通過函式過載來實現

b) 執行時多型(動態繫結)

通過虛函式來實現

動態繫結 virtual關鍵字/虛函式 函式過載 虛函式表

只有基類用virtual修飾的函式才有可能實現多型。跟派生類用不用virtual修飾沒有關係。

我的感受

多型:給定哪個物件(記憶體中的真實存在的物件)呼叫的就是這個物件的方法,與怎麼呼叫的沒關係,哪怕把這個物件的指標轉換成基類或其他派生類的指標,都不影響,這恰恰是多型需要保證的性質。

其他相關的

物件導向的四大性質

(1)抽象

(2)封裝--可以使**模組化

(3)繼承--可以復用/擴充套件已存在的**

(4)多型--為了介面重用,注: (2)(3)都是為了**重用

函式覆蓋--指派生類重新定義基類的方法 override

函式隱藏--指派生類的函式遮蔽了與其同名的基類函式

過載和重寫是同乙個意思 (override,overwrite)有時也稱為函式覆蓋,

派生類可以過載成員函式,只有過載父類定義的虛函式才能構成多型。

純虛函式 與 抽象類

引入純虛函式的目的,一是為了不讓不合理的基類例項化,二是強制派生類實現純虛函式

做法,就是讓函式宣告後面加上"=0"

參考[1]

待補充什麼是動態繫結,怎麼實現的?涉及到多重繼承是怎麼樣的?

待完成c++中指標和陣列的區別(準確表達是陣列名和指標的區別)

關於陣列:

(1)陣列名它相當於乙個指標常量,但它實際是指代陣列這種資料結構;

(2)能通過sizeof來求得陣列所佔記憶體的大小,也能求得陣列的長度(多維陣列同樣能求得每一維的長度);

(3)陣列是通過陣列名的位址+偏移量來獲取元素;

(4)通過函式呼叫時,將陣列作為引數,那麼陣列會退化成指標。

關於指標:

(1)指標它就是乙個固定大小的變數,通常是4個位元組,它是用來儲存位址的,間接訪問資料或函式;

(2)指標可以進行自增(自減)運算(void指標除外,因為不知道步長)。

更具體一點,指標和陣列訪問的區別?

陣列是通過陣列名的位址+偏移量來獲取元素,陣列名是編譯時就知道它的位址的,直接獲取元素;

指標是先獲取指標變數裡的位址,(這個位址是在執行時才能確定,有可能是無效的),然後再獲取該位址的內容。

容易忽略的地方

注意宣告和定義的區別,定義是為乙個變數或者物件分配記憶體空間,而宣告只是描述型別

關於陣列char a[5], a與&a是不同的,不是說得到的位址不同,而是說有不同的含義(a+1與&a+1結果是不同的)。

參考:[1]

[2]

c++中new的過程是怎麼樣的?

待完成

有關字元陣列的若干問題

1 給字元陣列char a 10 賦值的方法 定義時直接賦值 char a 10 hello 注意 不能先定義再給它賦值,如 char a 10 a 10 hello 這樣是錯誤的!2 對陣列中字元逐個賦值 char a 10 3 利用strcpy 賦值char a 10 strcpy a,hell...

面試 面試官的若干問題

部落格的這些問題 簡稱 問題 不是我的原創,是在舞台劇 潮 性 辦公室 香港 的台詞中摘取的,覺得都挺好的,所以就自己手抄乙份發上來了,希望對各位有點幫助吧,當然了,準備去面試的人,也可以考慮一下以下問題。可能是基於香港文化的渲染吧,這些問題,在我的面試生涯中,的確出現的次數並不太多。最常見的應該是...

C 模板的若干問題

1.為什麼要使用模板?對於特點相似的類,比如有相同的方法相似的成員,使用模板可以使得這些類得到進一步的抽象。也就是寫乙個超級形態的類。這樣至少有乙個淺顯的好處,只用寫一次。但實際上,可能更方便維護,也具有更一直的特性。對於函式,作用也類似,也就是形成乙個函式簇,這個函式簇的所做的動作是高度相似的。使...