派生類的例項由基類的例項加上派生類新增的成員組成。派生類的引用指向整個類物件,包括基類部分。
如果有乙個派生類物件的引用,就可以獲取該物件基類部分的引用(使用型別轉換運算子)
==派生類的引用可以看到完整的myderivedclass物件,而mybc只能看到物件的mybaseclass部分!==myderivedclass derived=new myderivedclass();//建立乙個物件
mybaseclass mybc=(mybaseclass)derived;//轉換引用
我們知道當使用基類引用訪問派生類物件時,得到的是基類的成員虛方法可以使基類的引用訪問」公升至「派生類內
可以使用基類引用呼叫派生類的方法,只需滿足以下條件:
1. 派生類的方法和基類的方法有相同的簽名和返回型別
2. ==基類==的方法用virtual標註
3. ==派生類==的方法使用override標註
class
mybaseclass
}class
myderivedclass:mybaseclass
}class
program
}
==當使用基類引用(mybc)呼叫print方法時,方法呼叫被傳遞到派生類並執行。==輸出:this is the derived class.
this is the derived class.
覆寫方法可以在繼承的任何層次出現,也就是不管你繼承了幾次
- 當使用物件積累部分的引用呼叫乙個覆寫的方法時,方法的呼叫被沿派生層次上溯執行,一直到標記為override的方法的最高派生(most-derived)版本
- 如果在更高的派生級別有該方法的其他宣告,但沒有被標記為override,那麼他們不會被呼叫。
1. 使用override宣告printclass
mybaseclass
}class
myderivedclass:mybaseclass
}class
secondderived:myderivedclass
如果把secondderived的print方法宣告為override, 那麼它會覆寫全部兩個低派生級別的版本
class
secondderivedclass:myderivedclass
}class
program
}
2.使用new宣告print輸出:this is the second derived class.
this is the second derived class.
class
secondderivedclass:myderivedclass
}class
program
}
我們已經學習了如何在方法上使用virtual/override,其實在屬性事件以及所引起上也是一樣的,下面的**演示了名為myproperty的唯讀屬性,其中使用了virtual/override.輸出:this is the second derived class.
this is the derived class.
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 ...