訪問者パターンを示す例をいくつか見てきました。それらのすべてで、派生した各訪問済み要素は、通常 Accept() メソッドと呼ばれるものを実装します。
色の階層では、このメソッドは次のようになります。
void Red::accept(Visitor *v)
{
v->visit(*this);
}
void Blue::accept(Visitor *v)
{
v->visit(*this);
}
Visitor とその継承者にメソッドがある場合:
visit(Red red);
visit(Blue blue)
私の質問は、これを基本クラス (この例ではColor
) でのみ同じ方法で実装しない理由です。ポリモーフィズムが機能します。つまり、オブジェクトが aRed
の場合、 this の動的型はRed
soであるため、正しい訪問が呼び出されます。逆参照すると が生成され、Red
それが順番に visit(red) が呼び出されますか?
私は何が欠けていますか?