面試題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...