如何在C++中创建一个类的多个实例
How to make multiple instances of a class in C++
如何在不单独键入名称的情况下创建多个类实例?
int main(){
myClass myInstance_1;
myClass myInstance_2;
myClass myInstance_3;
...
myClass myInstace_10;
}
您可以执行以下操作:
int main(){
std::vector<myClass> myInstances;
for(int i = 0; i < 10; ++i) {
myInstances.emplace_back(i);
}
myInstances[5].myClassFunction();
}
如何在不单独键入名称的情况下创建多个类实例
答案是你制作了一个数组,但不是你尝试的方式。
像这样:
int main()
{
MyClass myInstance[10];
for(int i = 0; i < 10; i++)
{
myInstance[i].myClassFunction();
}
}
提示:不要使用数组,请使用std::vector
或std::array
。
(参见@Jarod42的回答)
解决方案1:使用整数数组作为初始值设定项,构造函数用于将整数转换为myClass。
class myClass
{
public:
//constructor
myClass( int num) {m_number = num;};
void myClassFunction(){cout<< "I am " << m_number << endl;}
private:
int m_number;
};
int main(){
myClass myInstance[10] = {0,1,2,3,4,5,6,7,8,9};
for ( int i=0; i< 10; i++) myInstance[i].myClassFunction();
}
解决方案2:使用静态计数器设置m_number,因此无需使用非默认构造函数。
class myClass
{
public:
//constructor
myClass(){m_number=counter++;};
void myClassFunction(){cout<< "I am " << m_number << endl;}
private:
int m_number;
static int counter;
};
int myClass::counter = 0;
int main(){
myClass myInstance[10];
for ( int i=0; i< 10; i++) myInstance[i].myClassFunction();
}
解决方案3:在构造函数调用后设置m_number,这样默认的构造函数就足够了。
class myClass
{
public:
//constructor
void setNum(int num){m_number=num;};
void myClassFunction(){cout<< "I am " << m_number << endl;}
private:
int m_number;
};
int main(){
myClass myInstance[10];
for ( int i=0; i< 10; i++) myInstance[i].setNum(i);
for ( int i=0; i< 10; i++) myInstance[i].myClassFunction();
}
就像Jarod42的代码:
int main(){
std::vector<myClass> myInstances;
for(int i = 0; i < 10; ++i) {
myInstances.push_back(myClass(i));
}
myInstances[5].myClassFunction();
}
我认为这些应该有效。
使用数组:
myClass myInstance[10];
这将创建一个包含10个实例的数组,但每个实例的m_number都将设置为0。
另一种方法:
myClass *myInstance = new myClass[10];
for (unsigned int i = 0; i < 10; i++)
{
myInstance[i] = new myClass(i);
}
在这里,每个实例将具有不同的m_number值
编辑是为了修复上面代码的问题。已经提出了更好的解决方案。
myClass *myInstance[10];
// Allocate
for (unsigned int i = 0; i < 10; i++)
{
myInstance[i] = new myClass(i);
}
// At the end free
for (unsigned int i = 0; i < 10; i++)
{
delete myInstance[i];
}
相关文章:
- 如何将模板的实例传递给另一个模板的另一个实例?
- 在类的第一个/最后一个实例存在之前/之后调用一对函数.有没有更好的方法?
- 是否可以为所有子类设置一个实例?
- 如何在C++中将类的实例完全重新分配给同一类的另一个实例(然后删除原始对象)?
- 如何一次创建帧的一个实例
- 无法从派生类型的作用域访问另一个实例的受保护成员
- QT Windows GUI-无需qtSingLeaplication即可如何打开一个实例
- 包含另一个实例的特征实例,该实例持有固定大小的特征对象
- 从模板类的另一个实例创建模板类的实例时省略模板参数
- 为什么将FMTFLAG指定两次 - 作为枚举的一部分,而另一个实例为静态const变量
- 对成员变量的引用在向同一向量中添加另一个实例后断开
- std :: unordered_set :: find-仅构造一个实例()
- 是否可以在 std::optional 中放置一个实例,而不检查/破坏前一个实例?
- 从字符串中删除字符的第一个和最后一个实例
- Object 创建另一个实例,而不是修改指向的实例
- 在#define宏中创建一个实例
- C++-为任何lambda创建一个实例化桶
- qnetworkAccessManager一个实例并连接插槽
- C 是否有办法仅返回for循环的最后一个实例
- 为什么我的程序有一个实例,其中"Vector Subscript out of Range"?