从基类指针访问派生类函数时出错

时间:2014-10-08 18:31:05

标签: c++ polymorphism

我无法从基类指针访问派生类函数。 她是我的代码

#include<iostream>

class base
{
public:
void fun()
{
cout<<"Base class";
}
};

class der:public base
{
public:
    void fun()
    {
     cout<<"Derived class";
    }
};

int main()
{
 clrscr();
 base* pb;

 //der d1;
 //pb=&d1;             uncommenting these lines and commenting the below line 
 //pb->fun();          also gives an error

 static_cast<der*>(pb)->fun();      //error here ((der*)pb)->fun() works fine


 return 0;
}

我所知道的是,如果你有许多派生类派生自基类&amp;假设您不必创建那么多派生类对象,那么您创建一个基类指针。 从基类指针访问派生类函数是这里感兴趣的主题。我还听说基类指针泛型指针,因此它可以保存派生类对象的地址那么为什么我们不能直接这样做

der d1;
pb=&d1;  
pb->fun();  

应该调用派生类fun()。

但它给出了编译时错误。为什么呢?

1 个答案:

答案 0 :(得分:0)

使您的基类fun()函数virtual

试试这个:

using namespace std;
#include<iostream>

class base
{
public:
   virtual void fun()
   {
    cout<<"Base class";
   }
};

class der :public base
{
public:
     void fun()
    {
     cout<<"Derived class";
    }
};

int main()
{

 base* pb=new der();

 pb->fun();         

 return 0;
}