我创建一个基指针并将派生对象的地址传递给它。但是当我尝试通过该指针访问名为fun()
的函数时显示错误。为什么这段代码会出错?
#include<iostream>
using namespace std;
class Base
{
public:
virtual void fun ()
{
cout << "Base::fun()"<< endl;
}
};
class Derived : public Base
{
public:
virtual void fun ( int x )
{
cout << "Derived::fun(), x = " << x << endl;
}
};
int main()
{
Derived d1;
Base *bp = &d1;
bp->fun(5);
return 0;
}
答案 0 :(得分:0)
因为在你的基类中你只有一个函数fun()。只有在派生类中才有乐趣(int)。 you fun(int)不会覆盖基类中的fun(),而是完全创建一个新函数 - 函数签名不仅是名称,还有名称和参数。
由于您是通过基指针访问对象,因此无法访问fun(int)但fun()。