2

私は次のようないくつかのC++インターフェースを持っています:

struct IThese {
virtual void doThesethings() = 0;
}

struct IThose : public IThese {
virtual void doThoseOtherThings() = 0;
}

IThose は独自のメソッドを実装するだけでなく、他のインターフェイスからのメソッドも実装することに注意してください。そのため、の実装者は両方を実装IThoseする必要があります。

質問:doThesethingsで再宣言する必要がありIThoseますか?

そうでない場合、私がそれをしたらどうなりますか?ITheseメソッドをシャドーしますか?

4

2 に答える 2

1

現在class IThoseは抽象クラス**であり、その中で再宣言する必要はありませんdoTheseThings()。内部に実装することを選択できます。doTheseThings()class IThose

doThesethings()が に実装されている場合class IThose、その子クラス ( を派生させるIThose)はそれを実装する場合と実装しない場合があります。ただし、抽象化したくない場合は、 を実装する必要があります。 doThoseOtherThings()

virtual**抽象クラス:その中に、またはその基本クラスを介して、少なくとも 1 つの純粋なメソッドが含まれています

于 2011-07-14T03:24:04.850 に答える
1

で再宣言する必要はありませdoThesethings()IThose

を継承するクラス (または構造体) は、 を実装するIThese 必要doThesethings()があります。

継承元のクラス (または構造体) は、と 'doThoseOtherThings()` の両方を実装するIThose 必要があります。doThesethings()

他の質問に答えるために、で再宣言doThesethings()したIThose場合、異なるコンパイラは異なる反応を示す可能性があります。コンパイラが冗長と見なすため効果がないか、純粋仮想メソッドが 2 回宣言され、どちらの場合も純粋仮想であったためにエラーになります。

于 2011-07-14T03:44:44.900 に答える