【发布时间】:2014-09-02 13:11:53
【问题描述】:
我已经阅读了 C++ 中的虚函数,并了解了它们如何让程序员使用基类的指针访问派生类的成员函数。 (又名多态)。
一直困扰我的问题是:
- 为什么要在基类中声明一个同名的函数,如果最后必须声明为虚拟函数? (注意:我需要关于虚函数的多态性方面的答案)
- 在下面的代码中,如果使用基类指针(第 22 行)调用“virtual display()”,则会显示错误。为什么 C++ 中的虚函数如此严格 w.r.t.没有被基类指针调用?
.
#include <iostream>
using namespace std;
class B
{
public:
void virtual display()
{ cout<<"Inside base class.\n"; }
};
class D : public B
{
public:
void display()
{ cout<<"Inside derived class.\n"; }
};
int main()
{
B *b;
D d;
//Line-22 b->display(); Why can't 'b' call it's own display()?
b = &d;
b->display();
system("pause");
return 0;
}
输出:
在派生类中。
【问题讨论】:
-
你可以在调用 display 之前调用它的基类来做到这一点:
b->B::display() -
@CollioTV 谢谢。它有效:)
-
@CollioTV:尽管使用无效指针执行此操作仍然是非法的(即使在此示例中,它可能看起来是偶然的)。
标签: c++ polymorphism virtual-functions