#include <iostream>
#include<iostream>
using namespace std;
class A
{
public:
void foo()
{
printf("1\n");
}
virtual void fun()
{
printf("2\n");
}
};
class B : public A
{
public:
void foo()
{
printf("3\n");
}
void fun()
{
printf("4\n");
}
void testB()
{
printf("testB\n");
}
};
int main(int argc, const char * argv[]) {
A a;
B *ptr = (B *)&a;
ptr->foo();
ptr->fun();
ptr->testB();
B bb;
A *aa = &bb;
aa->foo();
aa->fun();
return 0;
}
A a;
B *ptr = (B *)&a;
ptr->foo();
ptr->fun();
ptr->testB();
派生類的對象B並沒有創建??
為什麼能夠使用,
多態是怎麼調用的
不能這樣用,只是這樣寫編譯器讓你編譯通過。
強制類型轉換為派生類型,調用虛函數,這個是編譯期間綁定的,所以可以調用。
但是這麼寫其實很危險,不知道會有什麼後果,當試圖讀寫派生類的變量的時候。
C++是一種充滿坑的語言,編譯器檢查很弱,你不能指望它。
好比數組,你明明越界了,也能通過編譯,你覺得編譯器會自動給你加大內存麼?當然不會。