#include
classb;
public:b
(int b =0)
:b(b)void
print()
};classd:
public b
;public:d
(double d =0)
:d(d)//呼叫派生類建構函式時先會呼叫基類預設建構函式 b是0
void
print()
};intmain()
; d d
; b:1
d:3.14
//b = d; //派生類物件賦給基類 d會被隱式轉換成b會產生切割 會導致成員丟失 輸出是0 !!!因為基類不是拷貝函式
//可以用指標 將基類指標指向派生類 或 將派生類指標賦給基類指標
//b*p = &d; //因為d物件呼叫派生類建構函式時 會先呼叫基類預設建構函式,預設建構函式是0
//p->print(); // b:0 因為p是b的物件所以呼叫的都是b裡面的print
//p = &b; //本來就是b物件取了b
//p->print(); // b:1
b *p =
&d;//取d物件裡的成員資料 如果沒取就會報錯,因為是乙個空指標
d *q =
static_cast
>
(p);
//將p強制轉換成d的物件指標賦給q 強轉基類指標
//q = static_cast(&b); 建議用指標 不然會造成資料丟失
q->
print()
; 呼叫派生類
//d *c = &b; // 不能從派生類指標取基類物件 d *c = p; 基類指標不能隱式轉換成派生類指標
d *c =
&d;//取d的物件位址 ,但是預設構造基類成員是0
b *a =
static_cast
>
(c);
//(d)報錯沒有適合的建構函式 q d c 都可以但是是0
a->
print()
;//b:0 呼叫基類的成員函式
while
(true);
return0;
}
關於基類指標 派生類指標 基類物件派 生類物件問題
1 基類指向派生類的指標 2 派生類指向基類的指標 3 以及將派生類指標強制轉換為基類指標 4 將基類指標強制轉換為派生類指標 無論是基類指向派生類還是派生類指向基類,重點就是哪個類的指標就呼叫哪個類的方法,而輸出的是指標指向的物件。基類指向派生類的指標即將派生類物件賦給基類指標,如果輸出的話,呼叫...
C 基類 派生類指標轉換
主要用到static cast和dynamic cast dynamic cast 1.dynamic cast是非常安全的,因為在不行的時候他會返回空指標 2.在多繼承中,由乙個基類轉換到另乙個基類,只能用dynamic cast 但是dynamic cast的使用是有侷限的,也就是基類一定要有虛...
基類與派生類
初學c 的時候,很多人都很頭疼各種訪問標號下基類與派生類的關係,其實,死記硬背肯定不是乙個好的辦法,要知道它們之間的關係,先要分析一下訪問標號是如何產生的 在沒有繼承之前,類的只有兩類使用者 類本身和類的使用者。把類成員通過public和private劃分恰好體現了這一分割 類的使用者只能訪問類的p...