繼承:
1.在已有類的基礎上新增功能。
2.新增資料。在派生類中新增指定字元。
3.修改類方法的行為。
派生:classa
class
b:public a
一、說明:
a是乙個公有基類(公有派生)。則a.
a的公有成員
成為b
的公有成員
b.a的
私有部分成為b
的一部分,
但只能通過
a的公有和保護方法訪問。
ps:b
需要自己的建構函式。
二、訪問許可權(子類不能直接訪問父類私有成員)
a.初始化成員列表b::
b(intb1,int a1, int a2
):a(a1,a2)
將a1,a2的值傳遞個a的建構函式,建立a物件,然後,建立b物件。b.
不使用初始化成員列表b::
b(intb1,int a1, int a2
)//:a()
會自動呼叫預設a();c:
引數為父類引用b::
b(intb1,const a & a
):a(a)或b
::b(int
b1,const a & a
):a(a)
,m_b1(b1)
呼叫a的拷貝建構函式。
ps:析構:子類析構
-》基類析構
建立子類物件:基類構造-》子類構造
三、指標轉換
基類指標
可以指向
子類物件;
基類引用
可以引用
子類。
但,只能呼叫基類方法。
e.g:
a*a;
a= new b();//
即b物件可以賦值給a指標
a.fun_a(); //僅能調a類方法
意義:1.
引數為基類指標或引用
void
test(const a &a);
呼叫:aa
;b b;
test(a);//
基類方法
或test
(b);//
可傳入b類引用
2.
子類物件
賦值給基類物件aa;
b b;
a = b;//
子類物件可以賦給基類物件
隱式呼叫了a &operator=(consta &)const;
四、多型公有繼承
多型:具有多種形態,及同乙個方法的行為隨上下文而異。
實現方式:
子類重新定義基類方法。
使用虛方法。
1.
使用虛函式
class
aclass
b:public a
a.根據物件型別決定呼叫哪個方法(物件呼叫方法)aa;
b b;
a.fun_a();//
調a類方法
b.fun_a();//
調b類方法
b.根據引用或指標型別決定呼叫哪個(指標或引用呼叫方法)(1
)使用virtual
a a;
bb;a&a_test =a;
a&b_test =b;
a_test.fun_a
(); //調a
b_test.fun_a
(); //調b
二者呼叫的不同方法。根據物件型別決定。(2
)不使用virtual
a_test.fun_a
(); //調a
b_test.fun_a
(); //調a
只根據指標或引用型別決定。
ps:
基類宣告虛方法後,子類自動就是虛方法,也可以使用
virtual
在子類中標記。
c
.宣告虛析構函式(慣例)
確保釋放子類物件時,釋放順序是:子類
-》基類。
e.g:
a* p;
p = new b();
delete p;
若a的析構函式不是虛函式,則只呼叫a的析構函式,那麼b類物件未釋放。
若
a的析構為虛函式,那麼
b的析構也為虛函式,則會呼叫
b的析構函式,就是先釋放
b物件,再釋放a。
d
.演示虛函式
a*a_array[4] = ;
//建立基類指標陣列,同時可以新增基類和子類的物件的指標。即可使用乙個陣列便是多種型別的物件,即多型性。
五、子類呼叫基類方法::定義b
類方法:
voidb::fun_a()
若不使用作用域解析運算子,則會認為是
b類的函式,出現遞迴。
類的繼承與派生
類的繼承與派生 一 派生類生成過程 1 吸收基類成員。2 改造基類成員。3 擴充基類成員。在類的派生中,建構函式和析構函式不能被派生。派生類繼承了基類的全部資料成員和除了構造,析構之外的全部函式 成員。二 類的繼承方式有共有繼承 保護繼承 私有繼承三種 1 公有繼承。基類的公有和保護成員的訪問屬性在...
類的繼承與派生
儘管在派生類物件中含有從基類繼承而來的成員,但派生類並不能直接初始化這些成員,必須使用基類的建構函式來初始化它的基類成員。初始化順序 先初始化基類成員,在初始化自己新增成員。派生類可以訪問基類的公有成員和受保護成員。類的作用域分辨符。我們可以將基類的指標或引用繫結到派生類物件上,但反過來不行,不存在...
類的繼承與派生
乙個新類從已有的類獲得其已有特性,稱為類的繼承 從已有的類 父類 基類 產生乙個新的子類 派生類 稱為類的派生。因此,類的繼承與派生是同樣乙個過程的兩個方向的描述。單繼承 乙個派生類只從乙個基類派生 單繼承關係形成的層次是乙個樹形結構。箭頭由派生類指向基類。某乙個事物是由其他幾種事物構成的,那麼其他...