可能是因為光是看書,關於看到的知識點也不會去深思各種各樣的場景去構造,導致遇到一些很基礎的問題都會犯二,寫此篇部落格,特警示自己:
學知識,最重要的是思考!!!
如果關於物件模型你還有那麼一點興趣,那麼可以繼續向下看,看看自己是否可以完全答對。。。
1.面試題(選擇題):
下面我貼出的是主要的**片,標頭檔案以及using namespace std;需要自行新增哦!
class a
virtual
void funtesta()
{}int _a;
};class b
virtual
void funtestb()
{}int _b;
};class c :public a, public b
int _c;
};void fun()
int main()
選項:
a pa、pb、pc的取值相同
b、 pc 和 pa不相同
c、pb和pc不相同
d、pc不等於pa,也不等於pb。
c類物件模型:
解析:在繼承體系中,當用乙個基類的指標或引用指向派生類物件時(賦值相容規則),這時會將派生類物件的位址偏移乙個合適偏移量,因為派生類物件也是乙個基類物件,實際也就是讓基類指標指向派生類中屬於基類的那部分。所以一般先繼承的那個類(基類)的指標和派生類的物件的位址相等。不知道你有沒有聽懂呢?(無奈臉)
2.問下列程式會輸出什麼?
1)a類和b類是兩個不相關的類
class a
void fun()
private :
int m_a;
int m_b;
};class b
void fun()
private :
int m_c;
};void fun()
int main()
a類和b類沒有關係,所以pb肯定呼叫的是b類的fun函式,但是pb又是被強制指向a類物件的,
那麼肯定會列印前a類物件前四個位元組的值,也就是1。(因為b類大小就是4個位元組)。
圖形解析如下:
2)b類公有繼承自a類時,程式會輸出什麼?
class a
void fun()
private :
int m_a;
int m_b;
};class b:public a
void fun()
private :
int m_c;
};void fun()
int main()
解析:pb仍然會去呼叫b類的fun函式,而b類的fun函式需要列印m_c的值,物件a中並沒有m_c,那塊空間未定義,所以程式最終輸出隨機值或者程式崩潰。
**如下:
3).b公有繼承自a,且將a中的fun函式定義為虛函式後
輸出結果為: 1 2
class a
virtual
void fun()//虛函式
private :
int m_a;
int m_b;
};class b:public a
void fun()//重寫
private :
int m_c;
};void fun()
int main()
物件模型:
4)b公有繼承自a,且a中的fun為普通函式,僅將b類fun函式定義為虛函式.
輸出什麼?——–>程式崩潰
class a
void fun()//普通函式
private :
int m_a;
int m_b;
};class b:public a
virtual
void fun()//虛函式
不知道你看完之後是什麼感受?你有沒有全部答對呢?如果全部答對了,那麼說明你對於繼承/多型理解的特別透徹了,希望你不要像我一樣慘~
關於資料庫的幾個面試題
儲存引擎主要有 1.myisam 2.innodb 後面三種不了解 3.memory,4.archive,5.federated 1.myisam 2.innodb innodb 底層儲存結構為b 樹,b樹的每個節點對應innodb的乙個page,page大小是固定的,其中非葉子節點只有鍵值,葉子節...
幾個SQL的面試題
1.解釋一下sql裡面的null 答案 null代表乙個unknown的值或者乙個不存在的值 2.如何用sql判斷乙個值是不是null?答案 可以用is null來判斷乙個值是不是null 3.所有包含null的計算表示式的返回結果都是null,這句話正確嗎?比如5 null返回null 答案 正確...
java面試題 有關於繼承的面試題
面試題 1,方法過載和方法重寫的區別?方法過載能否改變返回值型別?方法過載是在本類內方法的定義一樣,引數型別,引數個數不同,返回值型別不同 方法重寫是指子類的方法定義和父類的方法定義相同。其引數型別,引數個數,返回值型別都必須相同 方法過載能否改變返回值型別,因為與返回值無關。2,this與supe...