我无法从基类指针访问派生类函数。 她是我的代码
#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()。
但它给出了编译时错误。为什么呢?
答案 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;
}