C 類的向上轉型

2021-06-20 01:15:03 字數 559 閱讀 3473

#include

#include

class a

virtual void mytest()};

class b:public a

virtual void mytest()};

void main()

輸出為a myfunc!

a mytest!

b myfunc!

b mytest!

a myfunc!

b mytest!

類a的myfunc()為實函式,mytest()為虛函式;所以當paa = &bb後

paa->myfunc();輸出為  a myfunc!

paa->mytest();輸出為  b mytest!

將派生類位址賦給基類指標是安全的,如:paa = &bb;,但將基類位址賦給派生類指標則是不安全的,如:pbb = paa.

此處的new是必須的,用於建立物件.

若要在物件pbb中呼叫其基類a中的成員,可以用

pbb->a::myfunc();

pbb->a::mytest();

C 向上轉型

在學習c 的過程中,一些基礎知識比如資料型別 控制結構 陣列等都與之前接觸的語言大同小異,還能夠理解,但是向上轉型這個概念還是第一次遇到。學習了一下後大致理解如下 向上轉型就是將子類轉型成父類,物件可以作為它本身的型別使用。先來看一段 public class animal public class...

C 向上轉型

類其實也是一種資料型別,也可以發生資料型別轉換,不過這種轉換只有在基類和派生類之間才有意義,並且只能將派生類賦值給基類,包括將派生類物件賦值給基類物件 將派生類指標賦值給基類指標 將派生類引用賦值給基類引用,這在 c 中稱為向上轉型 upcasting 相應地,將基類賦值給派生類稱為向下轉型 dow...

C 向上轉型

在 c c 中經常會發生資料型別的轉換,例如將 int 型別的資料賦值給 float 型別的變數時,編譯器會先把 int 型別的資料轉換為 float 型別再賦值 反過來,float 型別的資料在經過型別轉換後也可以賦值給 int 型別的變數。資料型別轉換的前提是,編譯器知道如何對資料進行取捨。例如...