ReadFileFactoryTwo* rft=new ReadFileFactoryTwo;
ReadFileBase* rfb;
rfb=rft->ConctreateObject(myApp->g_FileType);
rfb->GetSource(myApp->g_FileName);
rfb->ReadFile(&myApp->g_data1,&myApp->g_data2,&myApp->g_RowCol);
以上是我的客户端代码,ReadFileFactoryTwo是用来生产ReadFileBase的子类对象,ReadFileBase有两个派生类,一个ReadFileTXT,一个ReadFileEXCEL,用以上代码调用时,不管我调用哪个对象,我查看虚函数指针都是指向第二个派生类ReadFileEXCEL的方法,
我就纳闷了,请问高手门这是什么原因啊?

解决方案 »

  1.   

      指针指向哪个类的对象,这个指针就调用哪个类的函数。一个基类指针可以调用基类和子类的函数,但是这个指针指向子类对象,就调用子类函数,指向基类对象就调用基类函数
       当用关键字virtual修饰一个类的成员函数时,那么这个类以及这个类的子类,都认为这个函数是虚函数。而这个类的父类不认为这个函数是虚函数。
      请运行以下代码,看看虚函数是怎么工作的
    class A{
    public:
    virtual void fun(){
    cout<< "A"<<endl;
    };
    };
    class A1: public A{
    public:
    void fun(){
    cout<<"A1"<<endl;
    };
    };class A2: public A{
    public:
    void fun(){
    cout<<"A2"<<endl;
    }
    };void main(){
    A *pa = new A;
    pa->fun();
    delete pa;
    pa = new A1;
    pa->fun();
    delete pa;
    pa = new A2;
    pa->fun();
    delete pa;}
      

  2.   

    呵呵,我知道哈,问题是我的基类指针指向了READFILETXT对象,但是我断点看虚函数指针却是指向READFILEEXCEL的,我就纳闷了啊?