2

C ++では、クラスFooAとクラスFooBがあり、どちらも基本クラスFooの子クラスです。FooBはinterface Barを実装する必要があります。FooBへのFooポインターしかなく、FooBのBarメソッドを使用したい場合は、キャストを行う必要があります。ただし、それは違反しているようpolymorphismです。

すべてのFoo派生クラスにBarも実装させることなく、FooBがBarインターフェイスを実装できるようにするためのより良いアプローチがあるかどうか疑問に思っています。

4

2 に答える 2

2

クラスを再設計します。継承は、ここで必要なものではない可能性があります。

理論的根拠:どこかにポインタがある場合、その所有者は、それがオブジェクトを指しているのか、それとも他の派生オブジェクトFooを指しているのかを知る必要はありません。実装を無視して、機能のみを使用します。(これが、ポリモーフィズムが一般的に機能する方法です。)FooFooBFoo

言い換えると、Fooポインタがあり、そのユーザーがでのみ機能に依存している場合、そのポインタはそもそもFooB型である必要があります。FooB

于 2012-10-31T13:21:47.247 に答える
0

Fooポインターのみを使用し、Barメソッドを呼び出す場合、FooはBarインターフェースを実装する必要があります。もちろんキャストなしでFooオブジェクトがこのメソッドを使用できることをコンパイラに知らせる唯一の方法です。

于 2012-10-31T13:21:03.393 に答える