多型的幾種情形:
在非建構函式,非析構函式的成員函式中呼叫虛函式,是多型;
class
base
virtual
void
func2()
};class
derived
:public base };
intmain()
輸出結果:
derived func2
derived func2
分析:上述使用指標和引用的方式實現多型,最終效果是一致的。
pbase->func1(); 實際語句是: pbase->func1()
this 指標是成員函式的第乙個引數,這個this 指向的是乙個派生類物件,所以它會呼叫派生類的func2()函式。 對於引用方式來說是同樣的道理。
在建構函式,析構函式的成員函式中呼叫虛函式,不是多型;
編譯時即可確定,呼叫的函式是自己的類或基類中定義的函式,不會等到執行時才決定呼叫是哪個函式;
class
base
virtual
~base()
virtual
void
hello()
virtual
void
bye()}
;class
derived
:public base
void
hello()
virtual
~derived()
};intmain()
輸出結果:
base hello
derived hello
derived hello
derived deconstruct
base bye
base deconstruct
base hello: 因為首先呼叫基類的建構函式,所以執行base();因為在base類的建構函式中呼叫虛函式不是多型,所以直接執行 基類的hello()函式;
derived hello: 在呼叫基類建構函式之後再呼叫派生類建構函式,同樣的原因不是多型,所以直接執行派生類中的hello()函式;
derived hello: 這個是通過pbase指標呼叫hello()函式,是多型;
derived deconstruct: 執行delete 語句,因為base類的析構函式為虛函式,所以可以通過基類指標釋放派生類物件。
base bye: 因為派生類並沒有覆蓋基類的bye函式定義,所以直接繼承了基類的bye函式,輸出結果即為派生類從基類繼承的bye函式;
base deconstruct: 最後呼叫基類的析構函式。
總結: 虛函式被呼叫的位置不同,決定了它不同的表現,所以一定要仔細分析。
非典型的 典型面試評測
一 面試交談 考察應聘者的任職資格和工作適應性 要素 觀 察 內 容 測 評 參 考 回 答 要 點 必問題 了解應聘者的基本情況 你是怎麼知道我公司招聘的?你目前的待遇是多少?期望本公司提供的待遇是多少?你換工作的原因是什麼?以前公司的工作頻率如何?經常需要加班嗎?多長時間出一次差?這種出差頻率影...
非典型的NinePatch使用模式
android程式設計師對ninepatc 件一定很熟悉,因為它的應用實在是太廣泛了,當影象需要拉伸或收縮時,一定會首先考慮到它,而由於android裝置那五花八門的解析度,影象的拉伸收縮幾乎是不可避免的.google已經為我們安排好了乙個簡單有效的ninepatch使用模式 list 建立影象檔案...
雅虎 外企折戟中國的非典型故事
有人曾發現,中國的網際網路公司,從門戶 到社交 再到 幾乎都是由模仿外國網際網路公司而來,但當這些鼻祖們進入中國市場,總是節節敗退。在眾多外企網際網路公司進軍中國的故事中,雅虎或許是那個最不典型的。雅虎入華甚早,一開始就推行本土化團隊,從收購中國創業公司,牽手中國重量級玩家,甚至一度將 雅虎中國 改...