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

Passing class instance as a pointer and using the overloaded subscript operator on this pointer

本文关键字:指针 运算符 下标 实例      更新时间:2023-10-16

我有一个包含整数数组的类,并且要获得此数组的引用,订阅运算符[]被超载(这是一个带有逻辑检查等的示例,删除了):

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'到type'int'的施放无效。

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

您需要使用:

boo->operator[] ( 0 );

(*boo)[0];

即。取消指向对象嘘的指针。

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

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

int val = (*boo)[0];

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

您的情况等效于:

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

而不是:

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