在C ++中获取对象的数组索引

时间:2013-01-16 16:46:01

标签: c++ arrays class object indexing

假设我有一个对象数组,我想根据它们的数组索引(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 ),而函数没有从外部接收到整数?

我知道这不是必要的,但我很好奇是否有可能。

谢谢。

3 个答案:

答案 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)

没有

但作为替代方法,您可以将初始化移动到构造函数(如果适用)。在创建数组时会自动调用它。但这也不会让你根据指数调整重量。