首页 > 解决方案 > 具有构造函数的另一个类中的对象数组

问题描述

如果我们有一个类的构造函数要在另一个类的构造函数中初始化,我们执行以下操作,

Class A{
 A(int arg):a(arg);
 int a;
};
Class B{
 B(int arg):A_obj(arg);
 A A_obj;
}

我遇到过如下情况,

Class B{
 B(int arg1,int arg2);
 A *A_obj//Array of objects of A of size arg2;
}

除了在单独的函数中初始化 this 之外,还有什么方法可以使用构造函数初始化器来完成吗?还有其他优雅的方式可以处理这个问题。

谢谢!

编辑:我希望在 B 的构造函数初始化程序中具有某种循环功能。

编辑:科里的回答解决了这个问题。我想知道我们是否可以进一步将迭代值作为输入参数传递给 A_obj 数组中 A 的每个实例。

class A{
 A(int arg,std::string n);
 int a;
 std::string name;
}

A_obj(arg2,A(arg1,"Name"+str(iterator))

解决方案(感谢 Cory)

#include <iostream>
#include<string>
#include <vector>

class A{
public:
    A(int arg,std::string n):a(arg),name(n){};
    int a;
    std::string name;
    void sayhi(){std::cout<<"Hi from "<<name<<std::endl;}
};

class B{
public:
    B(int arg1, int arg2){
        A_obj.reserve(arg2);
        for (std::size_t i = 0; i < arg2; ++i){
            A_obj.emplace_back(arg1, "Name" + std::to_string(i));  // create new A object and add to vector
        }
    }std::vector<A> A_obj;
};

int main(){
    B B_obj(1,10);
    for(int i=0;i<10;i++){
        B_obj.A_obj[i].sayhi();
    }
    return 0;
}

标签: c++classconstructor

解决方案


我建议将您的原始数组更改为std::vector

class B{
 B(int arg1,int arg2);
 std::vector<A> A_obj;
};

然后就可以使用成员初始化列表了

B::B(int arg1, int arg2) : A_obj(arg2) {}

arg2这将使用默认初始化A对象的数量来调整向量的大小。

如果您希望每个A都被初始化,arg1那么您使用另一个向量构造函数

B::B(int arg1, int arg2) : A_obj(arg2, A(arg1)) {}

要将不同的值传递给每个对象,您需要在构造函数主体中执行此操作

B::B(int arg1, int arg2)
{
    A_obj.reserve(arg2);
    for (std::size_t i = 0; i < arg2; ++i)
    {
        A_obj.emplace_back(arg1, "Name" + std::to_string(i));  // create new A object and add to vector
    }
}

推荐阅读