c 虛函式與覆蓋方法

2021-08-17 00:06:54 字數 2036 閱讀 6348

派生類的例項由基類的例項加上派生類新增的成員組成。派生類的引用指向整個類物件,包括基類部分

如果有乙個派生類物件的引用,就可以獲取該物件基類部分的引用(使用型別轉換運算子

myderivedclass derived=new myderivedclass();//建立乙個物件

mybaseclass mybc=(mybaseclass)derived;//轉換引用

==派生類的引用可以看到完整的myderivedclass物件,而mybc只能看到物件的mybaseclass部分!==

我們知道當使用基類引用訪問派生類物件時,得到的是基類的成員虛方法可以使基類的引用訪問」公升至「派生類內

可以使用基類引用呼叫派生類的方法,只需滿足以下條件:

1. 派生類的方法和基類的方法有相同的簽名返回型別

2. ==基類==的方法用virtual標註

3. ==派生類==的方法使用override標註

class

mybaseclass

}class

myderivedclass:mybaseclass

}class

program

}

輸出:this is the derived class.

this is the derived class.

==當使用基類引用(mybc)呼叫print方法時,方法呼叫被傳遞到派生類並執行。==

覆寫方法可以在繼承的任何層次出現,也就是不管你繼承了幾次

- 當使用物件積累部分的引用呼叫乙個覆寫的方法時,方法的呼叫被沿派生層次上溯執行,一直到標記為override的方法的最高派生(most-derived)版本

- 如果在更高的派生級別有該方法的其他宣告,但沒有被標記為override,那麼他們不會被呼叫。

class

mybaseclass

}class

myderivedclass:mybaseclass

}class

secondderived:myderivedclass

1. 使用override宣告print

如果把secondderived的print方法宣告為override, 那麼它會覆寫全部兩個低派生級別的版本

class

secondderivedclass:myderivedclass

}class

program

}

輸出:this is the second derived class.

this is the second derived class.

2.使用new宣告print
class

secondderivedclass:myderivedclass

}class

program

}

輸出:this is the second derived class.

this is the derived class.

我們已經學習了如何在方法上使用virtual/override,其實在屬性事件以及所引起上也是一樣的,下面的**演示了名為myproperty的唯讀屬性,其中使用了virtual/override.

class

mybaseclass

}}class

myderivedclass:mybaseclass

}}class

program

}

輸出:10

10

C 虛函式 過載與覆蓋 虛繼承

1.什麼是虛函式 簡單地說,那些被virtual關鍵字修飾的成員函式,就是虛函式。虛函式的作用,用專業術語來解釋就是實現多型性 polymorphism 多型性是將介面與實現進行分離 用形象的語言來解釋就是實現一共同的方法,但因個體差異而採用不同的策略。虛函式主要通過虛函式表 v table 來實現...

C 虛函式覆蓋 過載

cbase類處於作用域的外層,派生類的方法對於其將是不可見的,即隱藏的。而在派生類中,如果有過載函式時,基類函式將會被隱藏,否則基類函式就不被隱藏。includeusing namespace std 基類 class cbase virtual void jump void run int spe...

C 虛函式覆蓋 過載

在c 語言中,虛函式是非常重要的概念,虛函式是實現c 物件導向中多型性和繼承性的基石。而多型性和繼承性則是物件導向語言的精髓。掌握虛函式才算是真正掌握c 語言,而c 語言中虛函式的繼承覆蓋與函式過載有些類似,很多初學者搞不清他們之間的關係。首先要明確覆蓋 override 與過載 overload ...