1

可能かどうかはわかりませんが、達成すべき簡単な例があります。それを必要とする派生クラスがたくさんあるため、最初の純粋仮想関数を使用する必要があります。ただし、いくつかの派生クラスには2番目のパラメーターも必要です。

基本クラスの車があります:

public ref class Car abstract
{
.....
public:
  virtual void move(Road ^ road) = 0; //I am not allowed to delete this line
  //virtual void move(Road ^ road, Parameter2 ^ parameter2) = 0; //overload
}

純粋仮想関数をオーバーロードすることは可能ですか?または、最悪の場合、2つのパラメーターを必要とするいくつかのクラスでその関数を無効にしますか?

私はただ学んでいます、愚かな質問でごめんなさい。

4

1 に答える 1

2

仮想関数をオーバーロードすることは確かに可能です。どちらが呼び出されるかは、関数パラメーターの数(およびタイプ)に基づいています。純粋仮想関数('= 0')は、基本クラスのすべての純粋仮想関数を実装するためにすべての派生クラスに要件を課すことに注意してください(または、要件をさらに派生クラスに渡すことで、それ自体も抽象化します)。

ただし、最初の宣言の署名/本文を変更できる場合は、1つの関数だけで済ませることができます。

  virtual void move(Road ^ road, Parameter2 ^ parameter2 = 0) = 0;

parameter2これは、呼び出し時に明示的に指定されていない場合に、デフォルトのパラメーターをに割り当てます。parameter2次に、の値parameter2が0の場合、ロジックを最初のケース(no)と同じにします。

于 2012-04-15T11:02:58.847 に答える