【发布时间】:2020-04-22 19:46:03
【问题描述】:
我有一个特定的类,我想创建 2 个可以一起工作的运算符
喜欢带数组的类,我想更改数组中的某个索引
喜欢这个 obj[3]=5
这可能吗? 如果是,怎么做?
这是我为 [] 运算符编写的代码
double Polynomial::operator[](int index) const {
int maxT = this->currentMax;
if (index > 0 && index < this->getDegree(false))
return this->coefficients[index];
cout << "overflow in index";
system("pause");
}
【问题讨论】:
-
TL;DR:
double Polynomial::operator...-->double &Polynomial::operator... -
虽然在
operator[]中进行边界检查并没有错误,但它是非常规的。大多数容器在operator[]中跳过边界检查(尽可能快)并提供一个名为at()的成员函数,它会进行边界检查并在index超出范围时抛出异常。顺便说一句,index通常应该是unsigned类型,例如size_t。这是一个简单的例子:godbolt.org/z/qr26cd -
没有single操作符
[]=,所以不能重载。您可以重载[]运算符和=运算符。 -
@ThomasMatthews 我没有看到运营商
[]=提及或暗示。标题分别提到了[]和=。
标签: c++ class oop operator-overloading