C ++在自定义类/结构的数组构造函数中获取数组键?

时间:2010-07-11 17:06:28

标签: c++ arrays array-key

如果我有这样一个简单的类:

class MyClass
{
    MyClass(){}
    ~MyClass(){}
public:   
    int myArrayKeyValue;
};

后来,我创建了这些类的数组:

MyClass testing[10];

在构造函数中,我如何访问数组键,以便为数组的每个元素适当地设置myArrayKeyValue?所以我明白了:

testing[0].myArrayKeyValue = 0;
testing[1].myArrayKeyValue = 1;
testing[2].myArrayKeyValue = 2;
testing[3].myArrayKeyValue = 3;
etc...

是否可以在构造函数中完成此操作?或者我是否必须循环遍历数组并手动分配值?

6 个答案:

答案 0 :(得分:3)

  

是否可以在构造函数中完成此操作?

没有

  

或者我是否必须循环遍历数组并手动分配值?

是。虽然您可能可以重新设计,以便不需要了解这些实例之外的内的索引。

可能的替代方案包括:

  • map<int, MyClass>
  • 这样的关联容器
  • set<MyClass>,其键值为订购条件

答案 1 :(得分:0)

您无法直接从构造函数执行此操作;它无法访问数组中对象的位置。您必须编写一个循环来进行初始化。

或者 - 我甚至在提到这一点时感到有些厌恶 - 使用从构造函数中增加的全局或静态计数器。保证施工顺序从阵列的开始到结束,因此这在技术上是有效的。但它太可怕了。

(顺便提一下,你的例子中的构造函数是私有的,所以数组声明甚至都不会编译。)

答案 2 :(得分:0)

在构造函数中递增的简单的从零开始的static成员应该这样做。您需要在创建阵列之前重置它。这是一个好主意是一个完全不同的主题:)

答案 3 :(得分:0)

这样的事情是可能的:

class MyClass { 
public: 
  MyClass(int index) { myArrayKeyValue = index; } 
  ~MyClass();
private:
int myArrayKeyValue;
}; 

int main() 
{ 
  MyClass testing[5] = { MyClass(1), MyClass (2), 
                   MyClass (3), MyClass (4), MyClass (5) };

  return 0; 
}

答案 4 :(得分:0)

考虑你想要的最终结果并尝试通过其他方式实现它可能是有价值的。

一种方法可能是:

std::vector<MyClass> v;
for (size_t i=0; i<nCount; i++)
    v.push_back(MyClass(static_cast<int>(i)));

答案 5 :(得分:-1)

您还可以使用静态计数器,如下所示:

class MyClass {
    static size_t static_counter;

    size_t m_value;
public:
    MyClass() {
        m_value = static_counter++;
    }

    inline static void reset() {
        static_counter = 0;
    }

    inline size_t get_value() const {
        return m_value;
    }
};

size_t MyClass::static_counter = 0;

但您有责任手动重置,否则会有内存侵入。这可以通过封装在更高级别(在析构函数中重置)来纠正。

编辑:我和Nikolai N Fetissov有同样的想法,并且预计:静态成员不会在多线程程序中使用。