【发布时间】:2014-01-30 20:47:09
【问题描述】:
下面可能是 C++ 中最简单的虚函数示例:
#include <iostream>
class A {
public:
virtual void f() {
std::cout << "A";
}
};
class B : public A {
public:
void f() {
std::cout << "B";
}
};
int main() {
{
// calls f() in derived class
A* a = new B();
a->f();
}
{
// calls f() in base class
A a = B();
a.f();
}
}
这个程序的输出是BA。我希望它是BB,即无论如何都要调用基类。
为什么在这里使用基类指针会有所不同?
我没有在标准中找到解释。
【问题讨论】:
-
我相信这是一个与切片不同的问题。在这里,似乎是对继承、多态性和运行时分派的误解。他还错过了它同时适用于“基类指针”和“基类引用”的事实。 (并且可能还有另一个关于该主题的 SO 问题)。
标签: c++ virtual-functions