私は C++ V1 で C++ form Thinking を勉強しています。継承を示す例に出くわしました。ここに行きます
#include <iostream>
class Instrument{
public:
virtual void play(){
std::cout<<"instrument::play()";
}
};
class Wind: public Instrument{
public:
void play(){
std::cout<<"Wind::play()";
}
};
void tune(Instrument& i){
i.play();
}
int _tmain(int argc, _TCHAR* argv[])
{
Wind flute;
tune(flute);
return 0;
}
Wind::play()
これはコンソールに出力されます。
しかし、メソッド「tune」を次のように変更すると
void tune(Instrument i){
i.play();
}
出力はinstrument::play()
コピーではなくフルートの参照が渡されるように「&」が追加されているため、なぜプログラムは ?instrument::play()
の代わりに出力するのWind::play()
ですか?