C++ でのオブジェクトのスライスを完全には理解していませんでした。次のコード例では、2 つのオブジェクトが同じ処理を受けているように見えますが、ポリモーフィズムが機能するのはそのうちの 1 つだけです。
参照を使用していますが、オブジェクトの 1 つがスライスされていないようです。launch_ship 関数の呼び出し中に何かが起こるに違いないと思いますが、何が問題なのか正確にはわかりません。
これがサンプルコードです。
#include <iostream>
class SpaceShip
{};
class MilleniumFalcon: public SpaceShip
{};
class Pilot
{
public:
virtual void operate(SpaceShip&)
{
std::cerr << "Operating spaceship" << std::endl;
}
virtual void operate(MilleniumFalcon&)
{
std::cerr << "Cannot operate that spaceship!" << std::endl;
}
};
class Chewbacca: public Pilot
{
public:
virtual void operate(SpaceShip&)
{
std::cerr << "Don't want to operate that low spaceship!" <<
std::endl;
}
virtual void operate(MilleniumFalcon&)
{
std::cerr << "Operating the Millenium Falcon" << std::endl;
}
};
void launch_ship(Pilot& pilot, SpaceShip& ship)
{
pilot.operate(ship);
}
int main()
{
Chewbacca chewie;
MilleniumFalcon millenium;
launch_ship(chewie, millenium);
}
output : あの低い宇宙船を操作したくない!