0

2 つの派生クラスが使用する関数がありますが、3 つ目は使用しません。3 つの派生クラスの 1 つがそれを使用していなくても、基本クラスにそのままにしておくのは理にかなっていますか?

3番目のクラスを許可しないと考える唯一の方法は、基本的にベースから派生した中間クラスを作成することです。次に、共通関数を使用する2つは2番目のクラスから派生します。

3級は使わないようにして、本来使うべき2人には使わせることはできますか?

それは船外に出ているように見えますか、つまり、3番目のクラスから関数を呼び出そうとしない限り、それは問題ではないはずです。それをすべて防ぐ方法があれば興味がありました手間をかけずに一緒に。

4

2 に答える 2

3

これを直接行う方法はありません。基本的に、サブクラス化するときは、サブクラスが基本クラスのより具体的なバージョンであると言っています。

この場合、「サブクラスは基本クラスのより具体的なバージョンです」と言おうとしていますexcept for the fact that it shouldn't be able to touch XXXこれは本質的に、リスコフの置換原則に違反しています。

これを処理する最善の方法は、階層に 2 番目の基本クラスを追加することです。これは、あなたが言及した解決策だと思います。

基本的に、階層を作成します。

base
 | \----   subclass without feature available
 |
 \--base+feature
       \--subclass one with specific feature
       \--subclass two with specific feature
于 2010-11-03T16:18:37.347 に答える
0

この関数を仮想にすることができます。次に、3 番目のクラスで関数をオーバーライドし、例外をスローします。これにより、開発者は 3 番目のクラスで関数を使用できなくなります。

于 2010-11-03T16:19:30.640 に答える