注册 登录
编程论坛 C++教室

关于基类和派生类指针问题

hziee 发布于 2010-03-12 18:46, 935 次点击
编译器如何识别一个指向基类的指针实际指向派生类?
3 回复
#2
quietstar2010-03-12 20:43
你的提法不正确:识别一个指向基类的指针实际指向派生类,并不是由编译器完成的,而是程序在运行时完成的。
这个正是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 编辑 ]
#3
succubus2010-03-15 09:11
2楼说的不错
我就不废话了。。。
#4
mengyingyida2010-03-17 11:13
恩,,赞同
1