c++ 継承時の仮想関数の呼び出しについて
c++の仮想関数について質問です。
次のように非常に単純なBaseとそれを継承したDerivedを用意します。
#include <iostream>
struct Base {
virtual void f()
{
std::cout << "Base" << std::endl;
}
};
struct Derived : Base {
void f() override
{
std::cout << "Derived" << std::endl;
}
};
int main()
{
{
Derived d;
Base b = d;
b.f();
}
{
Derived d;
Base& b = d;
b.f();
}
}
実行結果が、
Base
Derived
となります。
なぜ前者ではBaseのf()が呼ばれてしまうのでしょうか。