c 结构体在声明时赋值_C/C++编程笔记:C++入门知识,C++多态性和虚函数解析
本篇要學習的內容和知識結構概覽
多態性
編譯時的多態性稱為靜態聯編. 當調用重載函數時, 在編譯期就確定下來調用哪個函數.
運行時的多態性稱為動態聯編. 在運行時才能確定調用哪個函數, 由虛函數來支持.
靜態聯編中的賦值兼容性及名字支配規律
派生一個類的原因并非總是為了添加新的成員或成員函數, 有時是為了重新定義基類的成員函數。
在派生類有同名函數的情況下
Point * pPoint; // 聲明的基類指針只能指向基類
Circle * pCircle // 聲明的派生類指針只能指向派生類
如果派生類沒有基類的同名函數, 派生類的指針才根據繼承原則調用基類的函數
虛函數
一旦定義了虛函數, 該基類的派生類中的同名函數也自動成為虛函數.
虛函數的定義
用關鍵字virtual來聲明一個虛函數, 虛函數只能是類中的一個成員函數, 不能是靜態成員.
像這樣:
虛函數實現多態性的條件
關鍵字virtual告訴編譯器調用虛函數進行動態聯編.
使用虛函數不一定產生多態性, 也不一定使用動態聯編.
在調用中對虛函數使用成員名限定, 可以強制編譯器對該函數使用靜態聯編.
產生運行多態性, 也就是動態聯編有3個前提
(1)類之間的繼承關系滿足賦值兼容性規則
(2)改寫了同名虛函數
(3)根據賦值兼容性規則使用指針(或引用)
像這樣:
純虛函數與抽象類
在基類中不給虛函數一個有意義的定義, 可以說明為純虛函數, 將定義留給派生類去做
像這樣:
抽象類:包含有純虛函數的類稱為抽象類. 一個抽象類至少有一個純虛函數, 一個抽象類只能作為基類來派生新類, 不能說明抽象類的對象.
注意
空虛函數定義 virtual void area() {}
純虛函數定義 virtual void area() = 0;
純虛函數的派生類仍是抽象類. 如果派生類中給出了基類所有純虛函數的實現, 則該派生類不再是抽象類
類族
如果通過同一個基類派生一系列的類, 則將這些類總稱為類族.
像這樣:
多重繼承與虛函數
多重繼承可以被視為多個單一繼承的組合。
總結
C++有兩種多態性, 一種是編譯時多態性, 也叫靜態聯編; 另一種是運行時多態性, 也叫動態聯編. 這大大提高了我們解決問題的豐富性. 可能也是C++長久不衰的魅力所在吧! 我會繼續深入學習C++, 繼續挖掘語言的本質!
自學C/C++編程難度很大,不妨和一些志同道合的小伙伴一起學習成長!
C語言C++編程學習交流圈子,關注+私信【C/C++編程】微信公眾號:C語言編程學習基地
有一些源碼和資料分享,歡迎轉行也學習編程的伙伴,和大家一起交流成長會比自己琢磨更快哦!
總結
以上是生活随笔為你收集整理的c 结构体在声明时赋值_C/C++编程笔记:C++入门知识,C++多态性和虚函数解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 分布式事务_Java核心知识
- 下一篇: 关于快乐的名人名言大全208个