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的方法,
我就纳闷了,请问高手门这是什么原因啊?
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的方法,
我就纳闷了,请问高手门这是什么原因啊?
当用关键字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;}