C 多型的幾種非典型場景

2021-10-10 07:50:33 字數 1470 閱讀 7248

多型的幾種情形:

在非建構函式,非析構函式的成員函式中呼叫虛函式,是多型;

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 建立影象檔案...

雅虎 外企折戟中國的非典型故事

有人曾發現,中國的網際網路公司,從門戶 到社交 再到 幾乎都是由模仿外國網際網路公司而來,但當這些鼻祖們進入中國市場,總是節節敗退。在眾多外企網際網路公司進軍中國的故事中,雅虎或許是那個最不典型的。雅虎入華甚早,一開始就推行本土化團隊,從收購中國創業公司,牽手中國重量級玩家,甚至一度將 雅虎中國 改...