基于运行时值创建继承的对象 在C++中有一种方法可以根据运行时参数创建类的实例吗?下面是代码示例: class base { public: base(int a) : a_(a) {} virtual void print() { cout << "base"; } int a_; }; class A : public base { A(int a = 5) : a_(a), base(a) {} void print() override { cout << "class A"; } int a_; }; class B : public base { B(int a = 6) : a_(a), base(a) {} void print() override { cout << "class B"; } int a_; }; int main(int argc, char** argv) { int a = std::cin.get(); base childClass(a); childClass.print(); } 类基 { 公众: 基(inta):a_uz(a){ 虚拟空打印() { CUT< P>你的问题的简短答案(C++中有一种方法可以基于运行时参数创建类的实例)吗?是的。对你不想要的反应是“不幸的是你没有选择”。 但是,在一个只需编写一次的函数中,这是减轻的。下面的代码是一个简单的工厂示例。您将参数传入工厂,并创建所请求的对象。C++工厂几乎总是必须返回指向堆分配的资源的指针,以便在运行时运行。

基于运行时值创建继承的对象 在C++中有一种方法可以根据运行时参数创建类的实例吗?下面是代码示例: class base { public: base(int a) : a_(a) {} virtual void print() { cout << "base"; } int a_; }; class A : public base { A(int a = 5) : a_(a), base(a) {} void print() override { cout << "class A"; } int a_; }; class B : public base { B(int a = 6) : a_(a), base(a) {} void print() override { cout << "class B"; } int a_; }; int main(int argc, char** argv) { int a = std::cin.get(); base childClass(a); childClass.print(); } 类基 { 公众: 基(inta):a_uz(a){ 虚拟空打印() { CUT< P>你的问题的简短答案(C++中有一种方法可以基于运行时参数创建类的实例)吗?是的。对你不想要的反应是“不幸的是你没有选择”。 但是,在一个只需编写一次的函数中,这是减轻的。下面的代码是一个简单的工厂示例。您将参数传入工厂,并创建所请求的对象。C++工厂几乎总是必须返回指向堆分配的资源的指针,以便在运行时运行。,c++,inheritance,runtime,C++,Inheritance,Runtime,一个智能指针,std::unique_ptr用于存储对象,这样我们就不必记得自己手动删除它了 还有其他方法,如资源池,但无论在什么时候,您都需要切换或if/else,以获得适当的资源 #包括 #包括 结构基{ virtual~Base()=默认值;//必需 虚空打印()=0; }; 结构A:公共基础{ void print()覆盖{ STD::CUT:你不想要的解决方案是C++中唯一的方法。C++的自动执行非常少,你必须自己完成所有的工作。如果不是这种明确的结构,而是一些相同的构造函数,比如构造

一个智能指针,
std::unique_ptr
用于存储对象,这样我们就不必记得自己手动
删除它了

还有其他方法,如资源池,但无论在什么时候,您都需要
切换
if/else
,以获得适当的资源

#包括
#包括
结构基{
virtual~Base()=默认值;//必需
虚空打印()=0;
};
结构A:公共基础{

void print()覆盖{ STD::CUT:你不想要的解决方案是C++中唯一的方法。C++的自动执行非常少,你必须自己完成所有的工作。如果不是这种明确的结构,而是一些相同的构造函数,比如构造函数的辅助映射,或者脚本生成代码。有很多不同之处。ent方法,但它们都归结为同一件事:为每个类构造一个实例的代码,以及为特定类实例决定使用哪种代码的一些逻辑。就是这样。Sam说了,但您可以将
if
开关
封装在返回
基*
的工厂函数中(或适当的智能指针),这就是通常的做法。有一些方法可以减少锅炉板,从模板MP到宏再到codegen,但对于像这样的教育项目,基于
开关
if
语句的锅炉板可能是最好的。