【发布时间】:2016-05-18 18:50:42
【问题描述】:
我有虚拟课程 Car。 从这个类有不同的子类。
在我的界面中,我有函数
ride(std::string type = "mercedes")
函数采用参数类型,并基于此决定实例化哪辆车并执行骑行。 目前,我执行以下操作:
ride(std::string type = "mercedes")
{
if(type =="btw")
{
auto car = std::make_shared<BMW>();
car.ride();
}
else if(type =="audi")
{
auto car = std::make_shared<Audi>();
car.ride();
}
default
{
auto car = std::make_shared<Mercedes >();
car.ride();
}
}
在 if-else-loop 之前实例化 Car 的方法是什么,然后只分配正确的类型?
非常感谢!
【问题讨论】:
-
ride函数不应该负责创建派生实例。这就是工厂的用途。将字符串转换为特定的 Car 实例是一项职责。 -
从
Car派生每个制造商似乎很愚蠢。我只需要一个Car类,让它将其品牌和型号存储为std::string数据成员。
标签: c++ class user-interface interface