将类实例作为指针传递,并在此指针上使用重载的下标运算符

时间:2012-10-29 12:06:47

标签: c++

我有一个包含整数数组的类,并获取该数组的引用,下标operator []被重载(这是一个删除了逻辑检查等的精简示例):

class Foo {
public:

Foo() {};

// and overload the [] operator
int& operator[](const int index);

private:
const int LEN = 7;
int arr[LEN];
};

int& Foo::operator[](const int index) {
    return arr[index];
}

将此类(名为boo)的实例的指针传递给函数。现在我想做的是:

int val = boo[0];

但它失败了“错误:从'Foo'类型无效转换为'int'类型”。

我的第一个想法是我将一个指针传递给一个类,我应该将一个实例的副本放入范围并使用该副本。这有效。但我很好奇是否可以将用户定义的类型用作真正的内置类型?我应该使用包装吗?

2 个答案:

答案 0 :(得分:3)

因为重载的运算符是为对象定义的,而不是指向对象的指针。有两种选择:

int val = boo->operator[](0);

int val = (*boo)[0];

或者您可以传递对象(通过值或引用)而不是指向它的指针。

您的情况相当于:

Boo* b = ....;
b[0];           //this returns a Boo object

而不是:

Boo b;
b[0];           //calls operator[]

答案 1 :(得分:3)

您需要使用:

boo->operator[] ( 0 );

(*boo)[0];

即。取消引用指向对象boo的指针。