私は、コードのこの部分を試してみた:多重継承:2Classes1Method
struct FaceOfPast
{
virtual void Smile() = 0;
};
struct FaceOfFuture
{
virtual void Smile() = 0;
};
struct Janus : public FaceOfPast, public FaceOfFuture
{
virtual void Smile() {printf(":) ");}
};
...
void main()
{
Janus* j = new Janus();
FaceOfFuture* future = j;
FaceOfPast* past = j;
future->Smile();
past->Smile();
delete j;
}
をそれが意図した(出力2スマイリーフェイス)として動作しますが、私はしないでくださいコンパイルすべきだと思うが、Janus
のSmile()
の再宣言はあいまいである。
どのように動作しますか?
質問は、呼び出し側の部分ではないようですが、再定義の部分:なぜ、2つの異なるクラスから同じ名前の2つの仮想メソッドを再定義できますか? – alexisdm