#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 型別的變數。資料型別轉換的前提是,編譯器知道如何對資料進行取捨。例如...