型別相容規則
(1) 派生類的物件可以賦值給基類物件(2) 派生類的物件可以初始化基類的引用。
(3) 派生類物件的位址可以賦值給基類的指標。
for example:
class b
;class d: public b
;int main()
在替代之後,派生類物件就可以作為基類的物件使用,但只能使用從基類繼承的成員
#include
using namespacestd;
class
bo//基類b0定義
//公有成員函式};
classb1:
public bo
}classd1:
public b1};
void
fun(bo *ptr)
//引數為指向基類物件的指標
intmain()
派生類的建構函式和析構函式
建構函式: 呼叫基類:按照被繼承時宣告的順序對派生類新增成員物件初始化:在類中宣告的順序
執行派生類的建構函式體中的內容
#include
using
namespace std;
//基類
class
basea
;basea::
basea
(int a,
int b)
:m_a
(a),
m_b(b)
basea::
~basea()
//基類
class
baseb
;baseb::
baseb
(int c,
int d)
:m_c
(c),
m_d(d)
baseb::
~baseb()
//派生類
class
derived
:public basea,
public baseb
;derived::
derived
(int a,
int b,
int c,
int d,
int e)
:basea
(a, b)
,baseb
(c, d)
,m_e
(e)derived::
~derived()
void derived::
show()
intmain()
析構函式:
基類的析構函式無法繼承下來,派生類重新宣告新的析構函式
先執行析構函式的函式體,然後對派生類新增的型別成員物件進行清理,最後對所有從基類繼承的成員進行清理。
作用域分辨符(::)
如果派生類中宣告了與基類成員函式同名的新函式,即使函式的數表不同,從基類繼承的同名函式的所有過載形式都會被隱藏。
物件名.成員名物件指標->成員名
class
derived
:public base1,
public base 2()
;int
main()
若derived中未宣告新成員,產生二義性
改為:
class
derived
:public base1,
public base2
;//直接基類b
classb:
public a
;//直接基類c
classc:
public a
;//派生類d
classd:
public b,
public c
//命名衝突
void
setb
(int b)
//正確
void
setc
(int c)
//正確
void
setd
(int d)
//正確
private
:int m_d;};
intmain()
為了解決多繼承時的命名衝突和冗餘資料問題,c++ 提出了虛繼承,使得在派生類中只保留乙份間接基類的成員。
//間接基類a
classa;
//直接基類b
classb:
virtual
public a
;//直接基類c
classc:
virtual
public a
;//派生類d
classd:
public b,
public c
//正確
void
setb
(int b)
//正確
void
setc
(int c)
//正確
void
setd
(int d)
//正確
private
:int m_d;};
intmain()
C 繼承與派生 學習筆記
一 繼承和派生的基本概念 繼承是c 語言中的一種重要的機制,也是物件導向的乙個重要特徵,實現了物件導向程式設計思想中軟體復用的功能。繼承的實質就是通過現有的類的特徵,構造乙個具有現有類特徵的新類,這個新類成為派生類。派生類是從乙個或者多個以前定義的類 基類 繼承資料和函式,同時增加或者重定義資料和函...
C 繼承與派生 學習筆記
一 繼承和派生的基本概念 繼承是c 語言中的一種重要的機制,也是物件導向的乙個重要特徵,實現了物件導向程式設計思想中軟體復用的功能。繼承的實質就是通過現有的類的特徵,構造乙個具有現有類特徵的新類,這個新類成為派生類。派生類是從乙個或者多個以前定義的類 基類 繼承資料和函式,同時增加或者重定義資料和函...
C 繼承與派生
派生新類 吸收已有類的成員 調整已有類成員和新增新的成員 class 派生類名 繼承方式 基類名1,繼承方式 基類名2,派生類成員宣告 繼承方式有 public protected private 預設 公有繼承 基類的公有和保護乘員的訪問屬性在派生類中不變,基類的私有成員不能直接訪問 型別相容規則...