例外の形式を使用して範囲外の配列の値を返すのに問題があります。C++:例外処理で範囲外の配列から値を返す方法
Iクラスアレイを使用して例えば長さ10用と私のメインスクリプトで配列オブジェクトを作成します。配列の11番目の要素を特定の値に設定しようとしています。私のクラスの配列では、配列のインデックスが配列のサイズよりも大きい場合、この場合ArrayOutOfBoundsクラスから値を返す。私の主なスクリプトでは、ArrayOutofBoundsクラスからこのオブジェクトをキャッチして、範囲外のインデックスと、配列が範囲外であることを示すターミナルメッセージを出力しました。しかし、私は11番目の要素を設定しようとしていた実際の値をどのように返すのですか?
次のようになります。
クラスArrayOutOfBounds +演算子オーバーロード< <機能
class ArrayOutOfBounds {
public:
ArrayOutOfBounds(int index) : _index(index) {} ;
int index() const { return _index ; }
private:
int _index ;
} ;
ostream& operator<<(ostream& os,const ArrayOutOfBounds& m) {
return (os << "Array index is out of bounds") ;
}
をクラスArray内の関数をバックスロー:
double& operator[](int index) {
if(index > _size) {
ArrayOutOfBounds aoob(index) ;
throw aoob ;
}
return _arr[index] ;
メインスクリプト:
int main() {
Array array(10) ;
try {
array[11] = 10 ;
}
catch(ArrayOutOfBounds aoob) {
cout << '\n' ;
cout << aoob << " (index, value): " << aoob.index() << ", " << 10 << endl ;
}
cout << '\n' ;
return 0 ;
}
_arr [index]をスローする2番目のスロー値を追加しようとしましたが、2つのことをすぐにスローできないことを理解しました。
コードをステップ実行して例外が発生していることを確認しましたか?そしてそれはインデックス> = _sizeでなければならないのですか? – thorsan
OT:用語 - C++プログラムは*スクリプト*ではありません。 '_ 'で始まる変数名も標準によって予約されています。 – Galik
['std :: exception'](http://en.cppreference.com/w/cpp/error/exception)から継承した場合、[' what'](http:// en。 cppreference.com/w/cpp/error/exception/what)メソッドを使用して、インデックスを含め、必要なものを書き出します。 – CoryKramer