繼承和派生
class
csstudent
;void
setname
(const string &name)
//....};
class
cundergraduate
:pulic cstudent
;//覆蓋
bool
canbaoyan()
;};//派生類的寫法:類名:public 基類名
cstudent::printinfo()//呼叫基類的printinfo
2.類之間的關係
繼承關係和復合關係
繼承:」是「的關係
復合:「有」的關係
3.派生類覆蓋基類成員
4.類的保護成員
5.派生類的建構函式
在建立派生類的物件的時候,需要呼叫基類的建構函式:初始化派生類物件中基類繼承的成員。在執行乙個派生類的建構函式之前,總是先執行基類的建構函式。
派生類的析構函式被執行時,先執行派生類的析構函式,自動呼叫基類的析構函式。
6.public繼承的賦值相容規則
class
base
;class
derived
:public base
;base b;
derive d;
(1)派生類物件可以賦值給基類物件
b=d;
(2)派生類物件可以初始化基類引用
base&br=d;
(3)派生類物件的位址可以賦值給基類指標
base*pb=&d;
在類的定義中,前面有virtual關鍵字的成員函式就是虛函式。
class base;
int base::get(){}
virtual關鍵字只用在類定義的函式宣告中,寫函式體時不用。
建構函式和靜態成員函式不能是虛函式
多型的表現形式一
通過基類指標呼叫基類和派生類的物件,那麼被呼叫的時派生類中的同名的虛函式時:
(1)若該指標指向乙個基類的物件,那麼被呼叫的是基類的虛函式;
(2)若該函式指向乙個派生類的物件,那麼被呼叫的是派生類的虛函式。
這種機制就叫做」多型「。
class
cbase};
class
cderived
:public cbase
};int
main()
多型的表現形式之二
派生類的物件可以賦值給基類引用
通過基類引用基類和派生類中同名的虛函式時:
(1)若該引用引用的是乙個基類的物件,那麼被呼叫的是基類的虛函式;
(2)若該引用引用的是乙個派生類的物件,那麼被呼叫的是派生類的虛函式。
這種機制也叫做多型。
class
cbase};
class
cderived
:public cbase
};int
main()
多型的作用:在物件導向的程式設計中使用多型,能夠增強程式的可擴充性,即程式需要修改或者增加功能的時候,需要改動和增加的**較少。
多型實現的關鍵----虛函式表
每乙個虛函式的類(或有虛函式的類的派生類)都有乙個虛函式表,該類的任何物件中都放著虛函式的指標。虛函式列出了該類的虛函式位址。多出來的4個位元組就是用來存放虛函式的位址的。
多型的函式呼叫語句被編譯成一系列所指向的(或基類引用所引用的)物件中存放的虛函式表的位址,在虛函式表中查詢虛函式位址,並呼叫虛函式的指令。
#include
using
namespace std;
class
aclassb:
public a};
intmain()
輸出結果:b::func
a::func
虛析構函式:通過基類的指標刪除派生類的物件時,通常情況下只呼叫基類的析構函式
但是刪除乙個派生類的物件時,應該先呼叫派生類的析構函式,然後呼叫基類的析構函式。
解決辦法:把基類的析構函式宣告為virtual
派生類的析構函式可以virtual不進行宣告
通過基類的指標刪除派生類物件時,首先呼叫派生類的析構函式,然後呼叫基類的析構函式。
一般來說,乙個類如果定義了虛函式,則因該將析構函式也定義成虛函式。或者,乙個類打算作為基類使用,也應該將析構函式定義成虛函式。
注意:不允許以虛函式作為建構函式
純虛函式:沒有函式體
抽象類:包含純虛函式的類
C 的繼承和派生(四)多型的實現和虛函式
本篇所要講解的是包含多型,由於是在繼承的基礎上實現的,所以就乾脆放在繼承和派生這一專題了 在介紹多型前,請看下面一段 class do oid speak class pi oid speak class catvoid speak void display dog p void display p...
C 虛函式和多型繼承
指標和引用是很好理解的,變數的引用相當於給變數取了個別名,在函式呼叫時,傳引用是會將引數列表的值改變的。include using namespace std int main 最終輸出的結果都是0x7ffdd9aff7b4,即為記憶體中儲存整型變數m的位址。對於虛函式,它是實現多型公有繼承的關鍵。...
繼承 虛函式和多型小結
一.知識點總結 繼承 1.定義 在已有類的基礎上建立新類的過程。乙個 b 類繼承 a類,或稱從類 a 派生類 b類 a 稱為基類 父類 類 b 稱為派生類 子類 2.類繼承關係的語法形式 class 派生類名 基類名錶 資料成員和成員函式宣告 基類名錶 構成訪問控制 基類名1,訪問控制 基類名 2 ...