调用Derived类中定义但在Base类中不存在的虚函数时出错?当指针指向派生类时,为什么会出现此错误?
#include<iostream.h>
class A{
public:
virtual void fun()
{cout<<"A::fun()";
}
};
class B : public A
{
public:
virtual void fun()
{cout<<"B::fun()";
}
virtual void func()
{cout<<"B::func";
}
};
int main()
{
A *obj1=new B;
obj1->fun();
obj1->func();
}
Run Code Online (Sandbox Code Playgroud)
这是我在SO上看到的最不友好的问题.
当然你得到了错误(我猜你在调用时obj1->func()),因为你的变量是一个指向类型对象的指针A,而不是B.所以,即使你已经创建了一个B,你的变量就像是A因为编译器不知道它实际上已经B保存了.
您需要将变量更改为指向B:B* obj1 = new B;
或者您需要B在调用之前将指针强制转换为func:((B*)obj1)->func();
| 归档时间: |
|
| 查看次数: |
118 次 |
| 最近记录: |