如果我有这样一个简单的类:
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...
是否可以在构造函数中完成此操作?或者我是否必须循环遍历数组并手动分配值?
答案 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有同样的想法,并且预计:静态成员不会在多线程程序中使用。