我对 C++ 中的运算符重载有疑问。
我定义了以下类:
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 这样的赋值失败时,Whitout“静态”声明 myNewArray 会消失。
第二个问题是关于强制转换运算符的重载;我以这种方式重载了铸造运算符:
//!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 这样的赋值都会失败。
错误在哪里?请大家提出解决方案好吗?先感谢您!