基类c++的子类的通用设计接口

Common design interface for child classes of base class c++

本文关键字:接口 c++ 子类 基类      更新时间:2023-10-16

我有一个虚拟类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循环之前实例化Car,然后分配正确的类型,该怎么办?

非常感谢!

我认为应该使用工厂方法来实例化基于模型的派生类,然后使用基指针来调用派生方法(ride())。

Car{
public:
  static Car* Factory(std::string type = "mercedes") {
  if( type == "mercedes")
    return std::make_shared<Mercedes>();
  else if( type == "bmw" ) 
    return std::make_shared<BMW>();
  }
  virtual int ride();
}

用法:

Car *car = Car::Factory("mercedes");
car->ride();