1

オブジェクトの配列があり、配列インデックス (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 ) を取得する方法はありますか?

これが必要ではないことはわかっていますが、それが可能かどうか興味がありました。

ありがとうございました。

4

3 に答える 3

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;
}
于 2013-01-16T16:54:18.743 に答える
2

いいえ、C++ 言語にはそのような機能はありません。本当に必要な場合 (デザインを再確認してください) 、オブジェクトのインデックスが変更された場合 (たとえば、コンテナーの中央に挿入した場合) は、それを渡して維持する必要があります

于 2013-01-16T16:49:36.303 に答える
1

いいえ。

ただし、代わりに、初期化をコンストラクターに移動することもできます (該当する場合)。配列を作成すると、自動的に呼び出されます。ただし、これでもインデックスに基づいて重みを調整することはできません。

于 2013-01-16T16:49:29.360 に答える