如何在C++中创建一个类的多个实例

How to make multiple instances of a class in C++

本文关键字:一个 实例 C++ 创建      更新时间:2023-10-16

如何在不单独键入名称的情况下创建多个类实例?

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::vectorstd::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];
}