下面是在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