2016-12-11 9 views
2

は、私はクラスI []演算子をオーバーロードしたい機能、または何も

class list 
{ 
    int val; 
    list *next; 
} 

を使用しています。これは私が作ってみたものです:

int & operator [](int n) 

{ 
    list *p; 
    p=this; 
    for(int i=0; i<n; i++) 
    { 
     p=p->next; 
     if(p==NULL) 
     { 
      cout<<"Index out of range "; 
      return ?? ; 
     } 
    } 

    return p->val; 
} 

私は、戻り値の型がint型&あるので、インデックスが範囲外である場合には何も返さないための方法があるかどうかを知るために興味があります。

答えて

0

可能なオプション:

  • 使用http://en.cppreference.com/w/cpp/utility/optional - おそらく最もエレガントでモダンな-CPP-方法
  • (あなたも返すことができ、あなたのクラスの静的メンバーとして「空のオブジェクト」を作成し、それに 参照を返します情報を持つオブジェクトとブール変数とリターンペア結果が正しい場合)
  • 要素とnullptrにリターンポインタない 結果(reather悪いオプション)
+0

* "おそらく最もエレガントでモダンなcpp-way" * - もっと重要なのは間違った方法です。関数がそれを約束できない場合は、例外がスローされます。できるだけ早く、あなたが持っているすべての最新のツールを使用して、単純なルールを過度に設計された混乱に変えないでください。 – IInspectable

2

"インデックスが範囲外"である場合、これはコード内の主要な内部ロジックの問題を示します。

このような状況では、C++では、例外をスローして例外的な状況を示すことができます。例外の使用時にぶつかる特定の学校がありますが、それらはC++の重要な部分であり、適切な場合は例外の使用には何も問題ありません。

一方、アプリケーションが内部論理フォルトである範囲外のインデックスを考慮していない場合、これを処理する方法の1つが正常に処理されるはずです。 operator[]は、ブール値フラグ、またはerror()operator int()などの適切な名前の関数を持つユーティリティオブジェクトを返すようにしてください。したがって、今やoperator[]のユーザーは、エラー状態の処理方法を理解する責任があります。

関連する問題