如果我们有一个带有构造函数的类要在另一个类的构造函数中初始化,请执行以下操作:
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;
}
除了使用serparate函数进行初始化外,使用构造函数初始值设定项还有什么方法可以实现?还可以通过其他任何优雅的方式进行处理。
谢谢!
编辑:我希望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;
}
我建议将您的原始数组更改为 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
则可以使用另一个vector构造函数
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
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句