C 程式設計師面試指南第9章

2021-07-25 14:46:40 字數 1611 閱讀 1709

面試題1:指出下段程式的錯誤,並解釋它為什麼是錯誤的。

#includeclass base;};

class derive: base;};

int main(int, char**,char**)

~a() {}}; 

class b : virtual public a

~b() {}

};class c : virtual public b

~c() {}

};void main(void)

編譯結果:

error c2248: 'a::a' : cannot access private member declared in class 'a'

面試題3:下面說法正確的是那個?

class a

;void func2();

};class b: public virtual a

答案:

a::print()

b::print()

c::print()

a::print()

b::print()

c::print()

a::print()

a::print()

a::print()

面試題5:訪問基類的私有虛函式

寫出以下程式的輸出結果

#include class a

{virtual void g()

{cout<<"a::g"<

答案:b::g

a::f

b::h

面試題6:簡述成員函式的重寫、過載和隱藏的區別

答案:(1)重寫和過載主要有以下幾點不同。

*範圍的區別:被重寫函式和重寫函式在兩個類中,而過載和被過載函式在乙個類中。

*引數的區別:被重寫函式和重寫函式的引數列表一定相同,而被過載函式和過載函式的引數列表一定不同。

*virtual的區別:重寫的基類中被重寫的函式必須要有virtual修飾,而過載函式和被過載函式可以被

virtual修飾,也可以沒有。

(2)隱藏和重寫、過載有以下幾點不同。

*與過載的範圍不同:和重寫一樣,隱藏函式和被隱藏函式不再同乙個類中。

*引數的區別:隱藏函式和被隱藏的函式的引數列表可以相同,也可以不同,但是函式名肯定要相同。當引數不

相同時,無論基類中的引數是否被virtual修飾,基類的函式都是被隱藏,而不是被重寫。

面試題7:簡述多型實現的原理

答案:編譯器發現乙個類中有虛函式,便立即會為此類生成虛函式表vtable。虛函式表的各表項為指向對應虛

函式的指標。編譯器還會在此類中隱含插入乙個指標vptr(對vc編譯器來說,它插在類的第乙個位置上)指向

虛函式表。呼叫此類的建構函式時,在類的建構函式中,編譯器會隱含執行vptr和vtable的關聯**,將vptr

指向對應的vtable,將類與此類的vtable聯絡了起來。另外在呼叫類的建構函式時,指向基礎類的指標此時已

經變成指向具體類的this指標,這樣依靠此this指標即可得到正確的vtable。如此才能正確與函式體進行連線,

這就是動態聯編,實現多型的基本原理。

程式設計師面試寶典 第1 8章

ptr 12 應為 ptr ptr 12 ptr printf d,d n a,b printf的引數是從右向左計算。運算子優先順序 int a 相當於將變數a所在位址開始的sizeof int 個位元組當成int型的資料輸出。如果乙個運算元是long型,乙個是unsigned int型,那麼只有機...

程式設計師面試完全指南

春季是求職的 時期,借這時機分享下程式設計師面試相關的感悟。好的簡歷,就已經成功了一半。簡歷的重要性不僅在展現個人形象,通常還會主導整場面試。面對海量的求職簡歷,面試官通常沒有過多時間準備針對性的面試問題,這時簡歷就起著面試 發言稿 的作用。乙份優秀的簡歷,主要從兩個方面 簡歷排版及內容。簡歷投遞後...

《C和C 程式設計師面試秘笈》第8章 資料結構

include include 1 單鏈表的 建立 鍊錶節點的定義 typedef struct node node typedef node ptrnode 建立單鏈表 輸入每個節點的資料,輸入0表示停止建立 node createsinglelist else tail next null li...