gpt4 book ai didi

c++ - 为具有许多变体的类存储默认值的推荐方法是什么?

转载 作者:行者123 更新时间:2023-11-30 05:04:10 27 4
gpt4 key购买 nike

我有一个具有多个属性的类,默认属性值会根据参数而变化。

例如我们有一个汽车类如下。

class Car {
public:
Car(int model);
~Car();

int getFuelTankCapacity() const;
void getTorque();
void getCC();

private:
int fuelTankCapacity;
int cc;
int torque;
};

假设我们想要在创建时根据模型编号初始化 Car 对象,并假设有 30 个或更多模型。正确的做法是什么?我们应该有类似下面的东西吗?

Car::Car(int model)
{
switch(model) {
case swift:
.....
case rover:
.....
}
}

或者我们应该使用工厂类?感觉工厂类不适合,模型太多了。有什么建议吗?

我刚开始从事基于 C++ 的项目。请原谅我并帮助我。

这是上述示例的一个细微变体。我只看到编辑选项以添加更多信息。如果这不正确,请提出建议。

假设我们需要为一系列手机编写一个应用程序,并且希望拥有相同的固件。假设所有手机都具有相同的处理器,区别仅在于传感器、相机分辨率等接口(interface)设备。

假设我要为接近传感器、相机创建类。

启动时,应用程序应该获得基于模型的预定义功能(假设应用程序可以以某种方式获取模型)。一旦模型已知,它应该使用默认值初始化对象。

typedef enum _model_e {
eMOB12MP,
eMOB8MP,
eLASTMODEL
};

typedef struct _camera_info_t {
resolution_e res;
..........
}camera_info_t;

typedef struct _prox_sensor_t {
bool supported;
........
}prox_sensor_t;

typedef struct _config_t {
camera_info_t cam;
prox_sensor_t prox;
....
}config_t;

static const config_t configs[] =
{
{ // model eMOB12MP
.cam =
{
.res = 12MP,
........
},
.prox =
{
.supported = false,
............
},
........
},
{ //eMOB8MP
.cam =
{
.res = 8MP,
........
},
.prox =
{
.supported = true,
............
},
........
},
}

config_t *get_config(model_e model)
{
config_t *ptr = NULL;

if (model < eLASTMODEL && model >= 0) {
ptr = configs[(int)model];
}

return ptr;
}

在主函数中,我将调用 get_config() 并根据配置初始化所有对象。提出上述方法的唯一原因是,每当添加可以使用相同固件支持的新模型时,都需要在一个地方进行更改。这是正确的吗?

谢谢,
苏巴拉奥

最佳答案

这听起来像是 Factory Pattern 的用例. wiki 中的示例(PHP 一个,但仍然有助于理解这个想法)甚至使用汽车。

您可以实现一个使用注册方法的变体,您可以在工厂中注册大约 30 个模型。然后工厂使用正确的默认值来创建您的实例。这些默认值需要在某处提供给工厂(很可能在单独的头文件中)

关于c++ - 为具有许多变体的类存储默认值的推荐方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49050128/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com