派生類:
一:相關概念
基類(父類,超類)
子類定義子類的方式:
class 子類名:繼承方式 父類名
//繼承方式:public private protected
二:定義乙個子類物件時,構造函式呼叫的順序,析構函式調
用的順序。
class
b//父類~b
()};
classa:
public b //子類~a
()};
a obj;
//定義子類物件時需要呼叫父類和子類的建構函式。
//構造函式呼叫順序:先父後子
//析構函式呼叫順序:先子後父
三:等級訪問問題(public private protected)
四:函式遮蔽問題
概述:在定義乙個子類物件時,是可以呼叫父類的成員函式的(和訪問等級和繼承方式有關),例如:
classb}
;classa:
public b
;int
main()
但是,如果在子類中,有乙個和父類中相同的函式的話(函式名相同即可,不管形參個數),那麼這個時候,定義乙個子類物件時,所有的在父類中的同名函式就呼叫不了了,即被遮蔽了,例如:
class
bvoid
fun(
int a)};
classa:
public b~a
()void
fun(
int a,
int b)};
intmain()
當然,如果這個時候,在子類中有乙個和父類中的同名函式的話(形參也相同),那麼這個時候呼叫的當然也就是子類中的函式,例如:
classb}
;classa:
public b};
intmain()
如果,在子類中有了和父類中相同的函式名的話,那麼這個時候想呼叫父類中的同名函式(呼叫那些被遮蔽的同名函式,)的話,有兩種辦法。
辦法一:
使用:using
在c++11中為using定義了一種含義,即除了命名空間外的含義。
classb~
b()void
fun(
)void
fun(
int a)};
classa:
public b~a
()void
fun(
int a,
int b)
public
:using b::fun;
//讓父類的同名函式在子類中暴露出來};
intmain()
五:派生類物件模型概述
派生類是由兩部分組成的,一部分是基類部分,一部分是派生出來的(除了基類部分的成員)
所以對於乙個父類指標可以new乙個子類物件來說,因為子類物件含有父類部分,所以這個子類是可以當作父類來用的,因此,也解釋了,為什麼乙個父類指標可以new乙個子類物件。
所以有時候,乙個子類指標是可以賦值給父類指標的。
classa~
a()}
;classb:
public a~b
()};
intmain()
六:派生類的建構函式
定義乙個派生類物件時,基類建構函式用來初始化基類部分,派生類建構函式用來初始化派生類部分。
但是,如果基類沒有無參的建構函式,而是有有參的建構函式(不管是幾個有參的建構函式)時,就面臨著引數傳遞問題,即,如果只有預設構造該函式,那麼我們不用手動呼叫基類的建構函式,就可以完成基類和子類部分成員的初始化,但是,如果只有有參的建構函式的話,就需要自己手動呼叫父類的建構函式了。
classaa
(int a,
int b)~a
()public
:int m_a;};
classb:
public a~b
()public
:int m_b;};
intmain()
七:既是父類又是子類的類。
八:不想當基類的類
c++11 final的使用
使用方法:在類名後邊加final
class
a final~a
()public
:int m_a;};
classb:
public a //錯誤~b
()public
:int m_b;
};
說明:如果類b不想當基類,那麼同樣可以在類b名後邊加final
九:靜態型別和動態型別
靜態型別:也就是宣告時的型別。編譯時已知。
動態型別:指的是記憶體中的型別。
只有基類指標存在靜態型別和動態型別不一樣的情況。
十:派生類向基類的隱式型別轉換,父類與子類之間的拷貝與賦值
這一部分,可按派生類模型來理解。
基類和派生類記憶體詳解
昨天室友問了我乙個c 基類和派生類的記憶體方面的問題,由於當時不能給出確切的答案,所以今天在vs上面乙個個測試了一遍,今記錄下來。問題歸結為如下 class a public a a 0 cout b b a p b p fun p vfun p a 2 通過p改變a中a的值 couta a的值 基...
構造派生類
include include 繼承 構造派生類 using namespace std class student student 這個就是預設建構函式。就不能再有student std cout student 進一步解釋 對於student string pname noname 不輸入引數是...
生成派生類
1.吸收基類成員 將基類成員全盤吸收 派生類包含了除構造和析構函式之外所有成員。定義派生類後自動完成,無法干預 2.改造基類成員 1 基類成員訪問控制問題,依靠派生類定義時的繼承方式來控制。2 對基類資料或函式成員覆蓋與隱藏。同名隱藏 申明了乙個與基類成員同名的新成員 if是成員函式則參數列必須相同...