C 多型繼承相關面試題

2021-09-09 02:29:37 字數 2533 閱讀 5706

一、相關概念

類的編譯順序:類名-》成員名-》成員方法體

類的構造順序:成員物件-》類物件

子類的構造:父類-》子類

子類的析構:子類-》父類

過載:函式名相同 引數列表不同 作用域相同

隱藏:子類隱藏父類中同名的成員方法

覆蓋:子類覆蓋父類中相同的許成員方法

動多型:繼承中的多型   執行時期決定的多型

靜多型:模板 過載      編譯期決定的多型

動多型呼叫的要素

1:指標 引用

2:該型別下的虛函式

3:物件完整【物件不完整不可以進行多型呼叫】

二、四種型別強制轉換

1、const_cast:去掉const屬性的型別強轉  const int a = 1; int b = const_cast(a);

2、static_cast:編譯器認為安全的 int a; double b = static_cast(a);

3、dynamic_cast:執行時期的強轉,依靠rttl

·必須是指標

·繼承關係的型別指標

·有rttl

eg:class a }; 基類

class b : public a{};            派生類

a* a = new a;

b* b = new b;

a = b;  -> a = dynamic_cast(b);//error return null

這樣的強轉是不成立的,因為基類中的虛表指標是a* 型別的  但是派生類的虛表指標是b*型別的

b = a; //error

b* b = new a;

a* a = b;     -> a = dynamic_cast(b)  ->b的型別為b*  *b的型別為a

4、reinpreter_cast:強制轉換 等同於(int)

三、相關習題

1:基類指標指向子類物件,指標是什麼型別? *指標是什麼型別?【基類中含有虛函式】

father* f = new child();

typeid(f).name; ->father*

typeid(*f).name; ->child

2:基類構造清楚所有資料,基類指標呼叫自己的虛函式,子類呼叫虛函式

class base

virtual void show() };

class derive :public base

void show() };

int main()

3:基類存在虛函式,子類覆蓋,子類的記憶體布局

base::

vfptr

valdriver::val

【繼承父類的所有成員變數和方法,加上子類特有的成員變數和方法】

4:基類無虛函式,子類有虛函式,子類的記憶體布局,基類指標指向堆上的子類物件

class base

void operator delete(void* p) };

class derive :public base

void* operator new(size_t size) };

int main()

記憶體布局

vfptr

base::

derive::

5:基類定義虛函式和普通過載函式,子類定義同名函式隱藏普通函式和函式

class base

;class derive :public base

;

6:基類指標指向堆上的子類物件,delete,子類析構函式未呼叫,基類析構函式寫成虛函式

class base

virtual ~base() };

class derive :public base

~derive() };

int main()

7:基類虛函式放到共有,派生類虛函式放到私有,外部基類指標指向子類物件 能否派生類私有函式否訪問

class base

};class derive : public base

};int main()

//因為在編譯時期指令已經生成,因此在最後**執行時,系統就只能按照指令訪問派生類中的私有成員方法

8:基類和子類給不同的函式引數預設值,基類指標指向子類物件,呼叫函式

class base

};class deriver :public base

};int main()

//p呼叫的是派生類中的show但是會列印基類中的a,

//這是因為開始構造base我們並沒有給其傳引數,

//於是給在編譯階段就將a賦值成為base本身的預設值,

//在執行時,p找到正確的成員函式後,由於在編譯階段

//已經將10"push"進去了,所以只能執行下去,因此a最終為10

多型相關面試題

多型 同樣的呼叫語句有多種不同的表現形態 同樣乙個函式在不同的子類 父類中穿梭的時候表現出不同的形態。有繼承 有virtual重寫 有父類指標指向子類物件。是通過虛函式重寫實現。virtual關鍵字,告訴編譯器這個函式要支援多型 不是根據指標型別判斷如何呼叫 而是要根據指標所指向的實際物件型別來判斷...

多型相關的面試題

1.如何理解多型。多型的實現效果 同樣的呼叫語句有多種的表現形態 多型實現的三個條件 有繼承 有virtual重寫 有父類指標 引用 指向子類物件 多型的c 實現 virtual關鍵字,告訴編譯器這個函式要支援多型 不是根據指標型別判斷如何呼叫 而是根據指標所指向的實際物件型別來判斷如何呼叫 多型的...

C 多型面試題

答 多型是物件導向的重要特性之一,它是一種行為的封裝,是同一種事物所表現出的多種形態,簡單地說是 乙個介面多種實現 有兩種型別的多型性 編譯時的多型性。編譯時的多型性是通過過載來實現的。執行時的多型性。執行時的多型性是通過虛成員實現的。1.從儲存空間角度。虛函式對應乙個vtable,這個vtable...