假设我有一个对象数组,我想根据它们的数组索引(0,1,4 ......等)在这些对象中设置变量。有没有办法通过成员函数获取对象的索引(在其父数组中),也就是说,不传递整数?
编写示例:
class Car
{
public:
void init();
private:
short weight;
};
void Car::init()
{
// affect 'weight' based on object's array index
}
Car myCars[7];
myCars[2].init();
有没有办法从init()中检索myCars的索引(即 2 ),而函数没有从外部接收到整数?
我知道这不是必要的,但我很好奇是否有可能。
谢谢。
答案 0 :(得分:4)
您是否愿意向init
方法提供更多信息?您可以使用一些指针算法执行以下操作:
#include <iostream>
using namespace std;
class Car
{
public:
void init(const Car*);
private:
short weight;
};
void Car::init(const Car* arr)
{
// affect 'weight' based on object's array index
int idx = this - arr;
cout<< "My index: " << idx << endl;
}
int main()
{
Car myCars[7];
for(int i = 0 ; i < 7 ; ++i)
myCars[i].init(myCars);
return 0;
}
答案 1 :(得分:2)
不,C ++语言不提供这样的功能。如果你确实需要(仔细检查你的设计),你必须在中传递它并且如果你的对象的索引发生变化(例如,如果你插入容器中间)则保持它
答案 2 :(得分:1)
没有
但作为替代方法,您可以将初始化移动到构造函数(如果适用)。在创建数组时会自动调用它。但这也不会让你根据指数调整重量。