什麼是虛方法

2021-06-22 07:18:19 字數 650 閱讀 6900

虛方法使用起來比較簡單,但很難理解,對乙個沒有聽過說虛方法的人用概念很難向他解釋清楚,那麼下面小雨用乙個例子讓大家明白到底什麼是虛方法。

為了不讓大家眼花,我就不在這麼寫**了,用文字描述,假設我們的程式中有乙個父類animal,兩個子類bird和pig,父類中有乙個move()方法,那麼子類bird和pig也繼承了move()方法,但是豬和鳥的移動方式不同,所以在子類中對move()方法進行了覆蓋,然後我們在主函式中以指標變數的形式建立兩個物件,即animal *pig=new pig();animal *bird=new bird();然後呼叫物件的move方法,即pig->move(); bird->move();但是問題就出來了,觀察程式結果我們會發現兩個指標變數呼叫的都是父類中move()方法,而不是子類的。

這是為什麼呢,原因是c++追求和c一樣的效率,在程式編譯時,編譯器就會認為兩個指標變數都是animal型別,那自然會呼叫animal的move()方法,而new操作是在執行時才為pig和bird分配pig型別和bird型別,所以程式結果會和我們預期不一致,為此引入了虛方法。

將move方法宣告為虛方法就會避免此種問題,操作很簡單,即在方法前加上乙個vtrual修飾,即virtual void move();這樣就可以了。現在大家對虛方法的理解是不是清晰多了呢,簡言之虛方法的目的就是讓編譯器知道兩個指標的型別。

什麼是虛方法?

什麼是 虛方法 2006 10 20 03 23 當例項方法宣告包含virtual修飾符時,稱該方法為虛擬方法。不存在virtual修飾符時,稱該方法為非虛擬方法。非虛擬方法的實現是不變的 無論是在宣告它的類的例項上呼叫該方法還是在派生類的例項上呼叫,實現都是相同的。與此相反,虛擬方法的實現可以由派...

什麼是虛函式

虛函式聯絡到多型,多型聯絡到繼承。所以本文中都是在繼承層次上做文章。沒了繼承,什麼都沒得談。下面是對c 的虛函式這玩意兒的理解。一,什麼是虛函式 如果不知道虛函式為何物,但有急切的想知道,那你就應該從這裡開始 簡單地說,那些被virtual關鍵字修飾的成員函式,就是虛函式。虛函式的作用,用專業術語來...

什麼是虛函式

在某基類中生命為virtual並在乙個或多個派生類中被重新定義的成員函式,用法格式為 virtual函式返回型別 函式名 引數列表 實現多型性,通過指向派生類的基類指標或引用,訪問派生類中的同名覆蓋函式。虛函式繼承是解決多型性的,當用基類指標指向派生類物件的時候,基類指標呼叫虛函式的時候會自動呼叫派...