Ruby のような言語だと、継承関係になくても インタフェースが揃っているだけでポリモルフィズムを実現することができます。
つまり、a.func() というのがあって、a に A もしくは B のインスタンスが入るとき、 A と B には継承による親子/兄弟関係がある必要はなく、 func というメソッドを持っているだけで大丈夫です。
一方 C++ では、func というメソッドを持っているだけではダメで、 継承による関係を持っていないといけません。
継承による多態・インタフェースによる多態、とかいう言葉があったような気がします。
さて、一般的にはそうなのですが、C++ でも template を使うことによって、 インタフェースを揃えるだけでポリモルフィズムを実現できるというのが紹介されていました。
http://chasen.org/~taku/blog/archives/2005/03/c_13.html
最近は C++ からめっきり遠ざかってしまって、 template に関する知識も「T のコンテナ」くらいのレベルでしか持っていないのですが、 なかなか興味深いです。