-3

編集できないメインファイルがあります。やるべきことがいくつかあり、メインファイルに適したクラスを書いています。v1 オブジェクトは、独自のベクター クラスのインスタンスです。

メインのある時点で、この行があります。

try {
    // trying to get the element at(4)
    // should give an error
    cout << v1[4] << endl;
} catch (const string & err_msg) {
    cout << err_msg << endl;
}

v1 ベクトルのサイズが「3」であるため、インデックスが不足しているため、プログラムがクラッシュしています。ここでエラーを取ってもOKです。しかし、プログラムがクラッシュする前に cout 行の例外を取得するにはどうすればよいですか? そして、私はそのメインコードを編集することを許可されていません. ヘッダー ファイルまたはクラス定義で何かをする必要があります。ありがとう。

4

1 に答える 1

1

メイン コードを変更せずに、境界をチェックする独自のベクトル クラスを作成する必要がありますoperator[]

何かのようなもの:

template <typename T>
class MyVector
{
  T *data;
  int length;

  ...

  T &operator[](int i)
  {
    if (i < 0 || i >= length)
       throw std::string("Out of bounds!"); //throw std::out_of_range;
    else
       return data[i];
  }
  ...
};

を使用している場合は、代わりに次std::vectorを使用できます。at[]

指定された位置 pos にある要素への参照を返します。境界チェックが実行され、タイプ std::out_of_range の例外が無効なアクセスでスローされます。

于 2013-05-19T17:16:34.180 に答える