C 的類 派生類與基類指標(五)

2021-10-06 13:40:56 字數 1137 閱讀 4821

#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...