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

Error in accessing derived class function from base class pointer

本文关键字:类函数 出错 派生 访问 基类 指针      更新时间:2023-10-16

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

#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;
}

我所知道的是,如果你有许多派生类是从基类派生的&假设你不必创建那么多派生类对象,那么你就创建了一个基类指针。从基类指针访问派生类函数是本文感兴趣的主题。我还听说基类指针通用指针

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

应该调用派生类fun()。

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

使基类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;
}