——方法的行為應取決于呼叫該方法的物件,這種較復雜的行為稱為多型——具有多種形態,即同一個方法的行為隨背景關系而異,
virtual實作了物件呼叫正確的方法或方法序列,
實作多型的兩種機制:
- 在派生類中重新定義基類的方法(不會改變基類的方法),
- 使用虛方法,
宣告函式時若使用關鍵字virtual,則這些方法被稱為虛方法,
- 方法在基類中被宣告為虛的后,它在派生類中將自動成為虛方法,然而,在派生類宣告中使用關鍵字virtual來指出哪些函式是虛函式也是一個好辦法,
class Brass {
private: ...
public:
...
virtual void ViewAcct() const;
virtual ~Brass(){} }
class BrassPlus : public Brass { private:
...
public:
...
virtual void ViewAcct() const;
virtual ~Brass(){} }
基類宣告了一個虛構函式,是為了確保釋放派生物件時,按正確的順序呼叫解構式(后面見虛函式作用),
Brass dom("Dominic Banker", 11224, 4183.45); BrassPlus dot("Dorothy Banker", 12118, 2592.00); dom.ViewAcct(); // use Brass::ViewAcct() dot.ViewAcct(); // use BrassPlus::ViewAcct()
兩個ViewAcct()原型表明將有2個獨立的方法定義,基類版本的限定名為Brass::ViewAcct(),派生類版本的限定名為BrassPlus::ViewAcct(),
通過參考或指標而不是物件呼叫方法:
如果沒有使用關鍵字virtual,程式將根據參考型別或指標型別選擇方法:
// behavior with non-virtual ViewAcct() // method chosen according to reference type Brass &b1_ref = dom; Bross &b2_ref = dot; b1_ref.ViewAcct(); // use Brass::ViewAcct() b2_ref.ViewAcct(); // use Brass::ViewAcct()
如果要在派生類中重新定義基類的方法,通常應將基類方法宣告為虛的,這樣,程式將根據物件型別而不是參考或指標的型別來選擇方法版本,為基類宣告一個虛解構式也是一種慣例,使用虛解構式可以確保正確的解構式序列被呼叫(即從派生類物件到基類物件一次呼叫它們的解構式),
呼叫基類方法:在派生類方法中,標準技術是使用作用域決議運算子來呼叫基類方法:
Brass::ViewAcct(); // display base portion
----
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/4983.html
標籤:C++
上一篇:C++ 繼承特性
下一篇:vs2019編譯gdal3.1.0報錯 (filemanager.obj) : error LNK2001: 無法決議的外部符號 __imp_SHGetFolderPathW
