【发布时间】:2019-08-06 04:55:31
【问题描述】:
我写了一个 Vector 包装类。我想为这个类重载下标运算符。
如果用户想将一个值设置为大于大小的索引。我将向量大小调整为 index*2。
但是如果用户想从一个大于大小的索引中获取一个值。我会抛出一个异常。
那么,如何在重载的操作符方法中检查这两种情况呢?
矢量.h:
#include <iostream>
#include <vector>
using namespace std;
template <class T>
class Vector {
vector<T> v;
public:
T& operator[] (const int index);
T getmax ();
int add (T val);
int size();
int capacity();
};
矢量.cpp
#include "Vector.h"
template <class T>
T Vector<T>::getmax (){
T retval;
return retval;
}
template <class T>
T& Vector<T>::operator[] (const int index){
//How to check that which is called => v[5]=10(setting) or cout<<v[5]/getting)?
if(index>v.size()-1){
v.resize(index*2);
return v[index];
}
else{
return v[index];
}
}
template <class T>
int Vector<T>::add (T val){ //return index
v.push_back(val);
}
template <class T>
int Vector<T>::size (){
return v.size();
}
template <class T>
int Vector<T>::capacity (){
return v.capacity();
}
main.cpp
#include "Vector.cpp"
#include <iostream>
int main () {
Vector<int> myobject;
myobject.add(67);
myobject[2]=99;
cout <<"myobject[0]:"<<myobject[0]<<endl;
cout <<"myobject[1]:"<<myobject[1]<<endl;
cout <<"myobject[2]:"<<myobject[2]<<endl;
cout <<"myobject[3]:"<<myobject[3]<<endl;
return 0;
}
【问题讨论】:
-
你不能。运算符不知道调用它的表达式。
-
这简直是糟糕的设计。您可以解决一些问题,但不要这样做。
标签: c++ operator-overloading stdvector