我正在实现一个向量,所以我希望它表现为一个数组。这就是我尝试实现下标运算符但我没有实现正确行为的原因。
实现是这样的:
template <typename value_type>
class Vector{
private:
value_type ** vector ;
long size ;
long usedSize ;
public:
/.../
value_type & operator [] (long) ; // For writing.
const value_type & operator [] (long) const ; // For reading.
/.../
}
template<typename value_type>
value_type & Vector<value_type>::operator[] ( long index ) {
if ( index < 0 || index > usedSize )
return out_of_range () ;
else {
vector[index] = new value_type () ;
usedSize++ ;
return *(vector[index]) ;
}
}
template<typename value_type>
const value_type & Vector<value_type>::operator[] ( long index ) const {
if ( index < 0 || index > usedSize )
return out_of_range () ;
else { return (*vector[index]) ; }
}
然后我用这个测试对象的行为:
int main (void) {
Vector<int> * v = new Vector ( 10 ) ; // Creates a vector of 10 elements.
(*v)[0] = 3 ;
int a = (*v)[0] ;
cout << "a = " << a << endl ;
}
我从执行中得到这个:
$> a = 0
一些线程建议使用重载赋值运算符的处理程序类,我想知道是否有办法避免使用处理程序对象来完成任务。
提前致谢。
来自阿根廷的贡萨洛。