我已经创建了一个Polynomial类,但是我想重载索引运算符以用作设置器,例如myPolyObject [0] = 2.5,但是在尝试重载它时会给我一个错误。
class Polynomial
{
public:
Polynomial();
Polynomial(Polynomial&);
Polynomial(double* coefficient, int size);
~Polynomial() { delete [] polynomial ; }
double operator [] (int exponent) const;
friend ostream& operator << ( ostream& , const Polynomial&);
Polynomial& operator = (const Polynomial&);
double evaluate(double x) const;
int getSize() const;
double operator [] (int exponent, double coefficient);
Polynomial& operator + ( Polynomial& );
Polynomial& operator + ( double x );
Polynomial& operator - (Polynomial&);
Polynomial& operator - (double x);
Polynomial& operator * (Polynomial&);
Polynomial& operator * (double x);
private:
double* polynomial;
};
在此代码中,我希望双精度运算符[](int指数,双系数)为数组获取索引(指数),并将该索引处的值设置为double系数值。
答案 0 :(得分:2)
您的问题似乎想要两个不同的东西,第一位在注释中得到回答,返回参考。这是完整性的示例,
struct example
{
double value_[10];
double& operator [] (int index) {
return value_[index];
}
};
int main() {
example e;
e[0] = 2.2;
std::cout << e.value_[0] << std::endl;
}
然后你说..
我希望double运算符[](整数指数,双系数)为数组取一个索引(指数),并将该索引处的值设置为double系数值。
您不能将operator[]
包含多个参数。有两种选择:
接受std::pair<int,double>
,它的语法很干净。例如。
struct example
{
double operator [] (const std::pair<int,double>& values) {
return 2.0;
}
};
int main() {
example e;
e[{1,2.2}];
//or
e[std::make_pair(1,2.2)];
}
或者,如果您真的想要逗号,则可以为指数创建自己的类型并重载逗号运算符。
struct exponent
{
int exp_;
double coeff_;
exponent(int value) : exp_(value),coeff_(0){}
operator std::pair<int,double>() {
return std::make_pair(exp_,coeff_);
}
exponent& operator,(double coeff) {
coeff_ = coeff;
return *this;
}
};
struct example
{
double operator [] (const std::pair<int,double>& values) {
return 2.0;
}
};
int main() {
example e;
e[exponent(1), 3.3];
}
我个人会选择第一个选项,或者改为过载operator()
。