将类实例作为指针传递,并在此指针上使用过载的下标运算符
Passing class instance as a pointer and using the overloaded subscript operator on this pointer
我有一个包含整数数组的类,并且要获得此数组的引用,订阅运算符[]被超载(这是一个带有逻辑检查等的示例,删除了):
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[]
相关文章:
- C++ 带有函数指针的运算符优先级
- 是否允许编译器省略对指针的 &* 运算符的组合调用?
- 错误:表达式必须具有算术、无作用域枚举或带有运算符重载的指针类型
- 重载 ostream << 运算符,指针作为参数,导致输出上的内存地址
- 在一个指令中声明更多指针的运算符优先级
- 为什么在通过引用返回运算符分配时取消引用'this'指针?
- SFINAE - 检测类型 T 是指针、数组还是带有随机访问运算符的容器,以及给定的值类型
- c++:复制、删除和运算符=在原始指针映射中
- 除了调用全局删除运算符之外,删除一个void指针还能做什么呢
- 类重载运算符 '<' 插入指向该对象集的共享指针时不调用
- 使用继承的指针列表复制构造函数或重载运算符=
- 是否可以将引用类型别名与指针运算符一起使用来声明对指针的引用?
- Caffe 源代码中层函数标头中指针运算符的含义
- 嵌套智能指针运算符>
- 运算符和指针运算符的地址
- 对于什么对象指针值,指向成员的指针运算符调用未定义的行为
- 在 65536 位置访问迭代器的指针运算符会导致段错误
- 检测对堆栈变量的调用delete(使用强制转换到指针运算符)
- C++中指向成员的指针运算符 ->* 和 .* 是什么?
- 关于智能指针运算符*和运算符>重载的说明