#include "stdio.h"
#include "string.h"
class Father
{
public:
name()
{printf("father name
");};
virtual call()
{printf("father call
");};
};
class Son: public Father
{
public:
name()
{printf("Son name
");};
virtual call()
{printf("Son call
");};
};
main()
{
Son *Son1=new Son();
Father *father1=(Father *)Son1;
father1->call();
father1->name();
((Son *)(father1))->call();
((Son *)(father1))->name();
Father *f2=new Father();
Son *s2=(Son*)f2;
s2->call();
s2->name();
((Father *)(s2))->call();
((Father *)(s2))->name();
}
//虚函数与指针的类型有关(指针是什么类型就调用哪个类型的类的对应函数)
//非虚函数的指向与指向的地址有关,而不是与指针类型相关(对于非虚函数,无论指针是什么类型,函数调用时只调用指针指向的地址(指向的对象的类型),与该指针是什么类型无关)