c++ - 具有构造函数的另一个类中的对象数组
问题描述
如果我们有一个类的构造函数要在另一个类的构造函数中初始化,我们执行以下操作,
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;
}
解决方案
我建议将您的原始数组更改为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
}
}
推荐阅读
- c# - Microsoft Visual Studio:您如何看待一行过去所说的内容?
- android-studio - 如何在 Android Studio 3.3 上禁用设备框架?
- python - 使用 drag_and_drop_by_offset 时的光标抓取(Python/Selenium)
- c++ - 如何自动生成结构的新实例?
- exception - 过于贪婪的条件,还是滥用异常?
- model-view-controller - 后端上下文中的 MVC 是什么?
- java - 动作事件上的 JavaFX 计算器应用程序集
- android - 使用 Kivy 访问 android 相机时出错
- python - 防止 Python webbrowser.open() 控制屏幕并阻止其他进程。是否可以最小化打开?
- laravel - laravel relationship not showing foreign key value