【发布时间】:2015-05-27 23:13:22
【问题描述】:
我已经创建了类数组,但有些奇怪.. 类如下:
class array
{
private:
int *a_;
size_t size_;
public:
array();
array(const size_t);
array(const arreglo &);
~array();
int const &operator[](size_t)const;
int &operator[](size_t);
array const &operator=(const array&);
bool empty()const;
};
[] 的重载实现是:
int const &array::operator[](size_t index)const
{
std::cout << "getter" << std::endl;
return a_[index];
}
int & array::operator[](size_t index)
{
std::cout << "setter" << std::endl;
return a_[index];
}
我测试代码的方式主要是:
int main()
{
array a(7);
a[0] = 3;
a[1] = 6;
a[2] = a[0] + a[1];
array b = a;
std::cout << b[2] << std::endl;
return 0;
}
问题是opertar [] 只是使用getter 版本并通过cout“setter”打印,而不是“getter”。 出了什么问题?
【问题讨论】:
-
你需要像这样拼写你的getter调用:
const_cast<const array&>(a)[0]等 -
您的意思是说“问题在于它只是使用 setter 版本”吗?
-
如果你能解释你想要达到的目标,那就太好了;如果您将
cout行放在一边,则代码会正确执行添加 -
IMO,OP 在最后一段中遇到了一些语言困难。他希望使用 const 运算符,但他发现正在执行的非 const 运算符。
-
这里原谅 C 程序员,但是编译器甚至可以根据不同的返回类型选择正确的重载函数吗?我一直认为唯一重要的是函数的参数。
标签: c++ operator-overloading overloading