>>980
これは分かりにくかったかも知れません。
void func(Shape &a, Shape &b)
{
 x.intersect(y); //(1)
}

Circle c{xxx};
Box b{xxx};
func(c, b);
のような場合に、(1)において、x の部分は仮想関数によってC++のもともとの機能で
実行時の型によって動的に振り分けできるが、y については、仮想関数では
そのような意味では振り分けできないから特殊な方法が必要になる、ということですね。