私は以下のコードを試していました:
クラスのオブジェクトを指しているポインタopengascap()
で車のクラスを呼び出していますが、ポイントされているオブジェクトの機能を提供しています。私の質問は、関数名がクラスに存在しないのに、なぜ出力が「fire」になるのかということです。car*
nuclear**
nuclear***
nuclearsubmarine
#include <iostream>
using namespace std;
class Vehicle
{
public:
virtual ~Vehicle() { }
virtual void startEngine() = 0;
};
class Car : public Vehicle
{
public:
virtual void startEngine()
{
cout<<"start car";
}
virtual void openGasCap()
{
cout<<"open";
}
};
class NuclearSubmarine : public Vehicle
{
public:
virtual void startEngine()
{
cout<<"start ship";
}
virtual void fireNuclearMissle()
{
cout<<"fire";
}
};
int main()
{
Car car;
Car* carPtr = &car;
NuclearSubmarine sub;
NuclearSubmarine* subPtr = ⊂
carPtr=(Car*)subPtr;
// This last line would have caused carPtr to point to sub !
carPtr->openGasCap(); // This might call fireNuclearMissle()!
return 0;
}
Ouput:火