关于基类和派生类指针问题
编译器如何识别一个指向基类的指针实际指向派生类?
你的提法不正确:识别一个指向基类的指针实际指向派生类,并不是由编译器完成的,而是程序在运行时完成的。
这个正是C++的多态性了!例如:
#include <iostream>
using namespace std;
class Base
{
public:
virtual void Print();
};
class Extend : public Base
{
public:
void Print();
};
void Base::Print()
{
cout<<"I'm Base"<<endl;
}
void Extend::Print()
{
cout<<"I'm Extend"<<endl;
}
int main()
{
Base *p = new Extend();
p->Print();
return 0;
}
上面例子中通过声明Print函数为虚函数,在程序运行时建立一个Base类的虚函数表,程序就是根据这张虚函数表来实现多态的。至于具体的实现细节,就涉及很多C++语言知识,建议参考一下C++权威书籍,我并非C++高手,在这里就不要误导你了。简单来说,就是基类指针在运行中,根据实际指向的对象调用相应对象的成员函数,这就是c++的多态性的体现了。
[ 本帖最后由 quietstar 于 2010-3-12 20:53 编辑 ]