2014-10-08 84 views
-1

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

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

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

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

派生类fun()应该被调用。

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

+2

'der'不会'在你的代码base'派生。你需要'class der:public base'语法来代替'class der' – 2014-10-08 18:32:05

+0

class der:public base – user3126632 2014-10-08 18:33:18

+0

does not work still – user3126632 2014-10-08 18:36:03

回答

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; 
} 
相关问题