【发布时间】:2017-02-18 13:36:59
【问题描述】:
假设我有两个派生自同一个基类的类。我想根据命令行输入实例化一个新的类对象。我可以这样做:
#include <iostream>
#include "DerivedClass1.h"
#include "DerivedClass2.h"
using namespace std;
int main(int argc, char *argv[])
{
if (argv[1] == "DERIVED CLASS 1") {
DerivedClass1 *myClass = new DerivedClass1(argv[2]);
myClass->doSomething();
} else if (argv[1] == "DERIVED CLASS 2") {
DerivedClass2 *myClass = new DerivedClass2(argv[2]);
myClass->doSomething();
}
}
但我想知道是否有更优雅的方式来做到这一点。我正在考虑创建一个抽象类工厂,或者将字符串名称硬编码映射到类实例。 几个限制
1) 我的基类是抽象的 - 它包含纯虚函数
2) 我只能调用参数化构造函数
【问题讨论】:
-
argv[1] == "DERIVED CLASS 1"是个错误 -
您必须创建一个工厂设计模式。此链接可能会有所帮助sourcemaking.com/design_patterns/factory_method/cpp/1
-
@M.M 有什么问题?
-
它比较
argv[1]是否指向存储"DERIVED CLASS 1"的内存位置(它永远不会)
标签: c++ class abstract base derived