我正在尝试使用括号运算符重载getter和setter。当我尝试使用
时double& my_vector::operator()(size_t index){
return array[index]
}
对于这两种情况,此单个运算符重载 :
例如:my_vector(1) = 4.01;
& double x = my_vector(1);
但是现在我想把getter作为const
和setter和non-const
,因为我将在另一个const函数中使用const getter。我做了
getter double& my_vector::operator()(size_t index) const;
setter为double& my_vector::operator()(size_t index);
我明白了 错误:仅在返回类型上有所不同的函数不能重载。
我想我知道错误在说什么,但我不确定如何纠正它。
答案 0 :(得分:5)
这是一个完整的例子,展示了它是如何运作的; (你可以在这里http://ideone.com/kO0Rf1)
运行#include <iostream>
using namespace std;
class my_vector {
public:
double data[6] = {1,2,3,4,5,6};
double & operator()(size_t i) {
std::cout<<"Calling non-const ()"<<std::endl;
return data[i];
}
double operator()(size_t i) const {
std::cout<<"Calling const ()"<<std::endl;
return data[i];
}
};
void withConst(const my_vector &v) {
double vv = v(0);
std::cout<<"v(0) = "<<vv<<std::endl;
// v(0) = 4.0; // Does not compile
}
void withNonConst(my_vector &v) {
v(0) = 4.0;
double vv = v(0);
std::cout<<"v(0) = "<<vv<<std::endl;
}
int main() {
my_vector vec;
withConst(vec);
withNonConst(vec);
return 0;
}