#include <iostream>
#include<stdio.h>
using namespace std;
class B
{
public:
void vf()
{
cout << "This is class B" << endl;
}
};
class D: public B
{
public:
void vf()
{
cout << "This is class D" << endl;
}
};
int main()
{
B b, *pb;
D d, *pd;
pb = &b;
pb->vf();
printf("%X\n",pb);
pb = &d;
pb->vf(); // no cast needed
printf("%X\n",pb);
pd = (D*)&b;
pd->vf(); // must cast explicitly
printf("%X\n",pd);
pd = &d;
pd->vf();
printf("%X\n",pd);
return 0;
}
/***** result *******/
/*
This is class B
22FF17
This is class B
22FF16
This is class D
22FF17
This is class D
22FF16
*/
只是和指针(类型)有关 pd->vf() 和指针pd有关。
/***** 对虚函数的调用由指针/引用的赋值决定(运行时多态) ****/
#include <iostream>
using namespace std;
class B
{
public:
void virtual vf()
{
cout << "This is class B" << endl;
}
};
class D: public B
{
public:
void vf()
{
cout << "This is class D" << endl;
}
};
int main()
{
B b, *pb;
D d, *pd;
pb = &b;
pb->vf();
pb = &d;
pb->vf();
pd = (D*)&b;
pd->vf();
pd = &d;
pd->vf();
return 0;
}
/******* result ******/
/*
This is class B
This is class D
This is class B
This is class D
*/
#include <iostream>
using namespace std;
class B
{
// virtual function in base class must be defined or be pure
// unless the base class and all its derived classes are not instantiated
public: void virtual vf();
};
class D: public B
{
public: void vf() { cout << "This is class D" << endl; }
};
main()
{
D d, *pd;
}
/*** result ***/
/*
ERROR
undefined reference to `vtable for B'
*/