C++ での Operator のオーバーロードに問題があります。
次のクラスを定義しました。
template <class T>
class Array
{
public:
//! Default constructor
Array(int ArraySize = 10);
////! Defualt destructor
Array<T>::~Array();
//! Redefinition of the subscript operator
T& Array<T>::operator[] (int index);
//! Redefinition of the assignment operator
const Array<T>& Array<T>::operator=(const Array<T>&);
//! Redefinition of the unary operator -
Array<T>& operator-(Array<T>& a);
//! Array length
int size;
private:
//! Array pointer
T *ptr;
};
単項演算子 - は次のように定義されます。
//! Redefinition of the unary operator -
template<class T>
Array<T>& operator-(Array<T>& a){
static Array<T> myNewArray(a.size);
for( int i = 0; i < a.size; i++){
myNewArray[i]=-a[i];
}
return myNewArray;
}
「myNewArray」のメモリへの永続化を回避するにはどうすればよいですか? 関数が終了し、VectorA=-VectorB のような代入が失敗すると、myNewArray は「静的」宣言なしで消えます。
2 番目の問題は、キャスト演算子のオーバーロードに関するものです。キャスト演算子を次のようにオーバーロードしました。
//!CASTING
template <class B>
operator Array<B>(){
static Array<B> myNewArray(size);
.... a function makes the conversion and returns myNewArray populated...
return myNewArray;
}
しかし、うまくいきません!オブジェクト myNewArray も、静的宣言を使用した関数の実行後に消えるようです。VectorA=(Array<'anytype'>)VectorB のような代入は失敗します。
エラーはどこにありますか? 誰もが解決策を提案できますか?前もって感謝します!