下面是在C++中的虚拟函数的也许是最简单的例子: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问题)。 – jww