这个指针和方括号超载

时间:2014-11-12 17:06:56

标签: c++ operator-overloading this

在我的类的公共方法中访问溢出的方括号时遇到问题。这是代码:

#include <iostream>
#include <cassert>
#include <cmath>
using namespace std;
template<unsigned int DIM> class Vector
{
private:
    double mData[DIM];
public:
    Vector(double tableau[DIM])
    {
        for(int i=0; i<DIM; i++)
        {
            mData[i] = tableau[i];
        }
    }
    double operator[](int index)
    {
        assert(index < DIM);
        assert(index > -1);
        assert(-pow(10,-6)<=mData[index]<=1+pow(10,-6));
        if(mData[index]>=0 && mData[index]<=1)
        {
            return mData[index];
        }
        else if(mData[index]<0 && mData[index]>=pow(10,-6))
        {
            return 0.0;
        }
        else if(mData[index]>1 && mData[index]<= 1+ pow(10,-6))
        {
            return 1.0;
        }
    }
    double getDim() const
    {
        return DIM;
    }
    void print() const
    {
        for(int i=0;i<getDim();i++)
        {
            cout << this[i] << " "; //PROBLEM!!
        }
    }
};

int main()
{
    double err=pow(10,-6);
    double tableau[5];
    tableau[0] = 0.5;
    tableau[1] = 0.79;
    tableau[2] = err;
    tableau[3] = 1+err;
    tableau[4] = 0;
    Vector<5> proba(tableau);
    proba.print();
}

我已尝试使用* this,this-&gt;,但任何似乎都有效。 我希望你能帮助我。 Florent的

3 个答案:

答案 0 :(得分:1)

成员运算符重载需要类类型的值或引用,this是指针。因此,您需要在使用运算符之前取消引用this指针,如下所示:

(*this)[i]

或者你可以直接调用操作符,它的优点是完全明确其意图,但缺点是有点罗嗦而且有点模糊(因此更有可能绊倒任何阅读它的人) :

this->operator[](i)

如果您已经尝试*this[i]并发现它无法解决问题,那是因为它实际上意味着*(this[i])

答案 1 :(得分:0)

除了错误地实现operator []之外,错误地使用它: -

cout << this[i] << " ";

这应该是

 cout << (*this)[i] << " "; //is you want to implement that way...

答案 2 :(得分:0)

this只是一个指针,因此要访问operator[],您可以先取消引用它:

cout << (*this)[i] << " ";

或直接调用该函数(不是首选):

cout << this->operator[](i) << " ";