C++ 对于具有许多变体的类,建议使用什么方法存储默认值?

C++ 对于具有许多变体的类,建议使用什么方法存储默认值?,c++,C++,我有一个类,它有几个属性,默认属性值根据参数而变化 举个例子,我们有一个汽车类,如下所示 class Car { public: Car(int model); ~Car(); int getFuelTankCapacity() const; void getTorque(); void getCC(); private: int fuelTankCapacity;

我有一个类,它有几个属性,默认属性值根据参数而变化

举个例子,我们有一个汽车类,如下所示

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

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

    private:
        int fuelTankCapacity;
        int cc;
        int torque;
};
假设我们希望在创建时根据模型编号初始化汽车对象,并假设有30个或更多模型。正确的方法是什么?我们应该有下面这样的东西吗

Car::Car(int model)
{
    switch(model) {
        case swift:
            .....
        case rover:
            .....
    }
}
还是我们应该使用工厂级?我觉得工厂级不合适,因为型号太多了。有什么建议吗

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

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

假设我们需要为一系列移动电话编写一个应用程序,并希望拥有相同的固件。假设所有手机都有相同的处理器,不同之处仅在于接口设备,如传感器、摄像头分辨率等

假设我将为接近传感器camera创建类

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

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;
}
typedef enum\u model\e{
eMOB12MP,
eMOB8MP,
弹性模型
};
类型定义结构\u摄像机\u信息\u t{
决议草案;
..........
}摄像机信息;
类型定义结构前置传感器{
布尔支持;
........
}前置传感器;
类型定义结构配置{
摄像机信息摄像机;
prox_传感器prox;
....
}配置;
静态常量配置[]=
{
{//eMOB12MP型
卡姆先生=
{
.res=12MP,
........
},
.prox=
{
.supported=false,
............
},
........
},
{//eMOB8MP
卡姆先生=
{
.res=8MP,
........
},
.prox=
{
.supported=true,
............
},
........
},
}
配置*获取配置(模型)
{
config_t*ptr=NULL;
如果(模型=0){
ptr=configs[(int)model];
}
返回ptr;
}
在main函数中,我将调用get_config()并根据配置初始化所有对象。提出上述方法的唯一原因是,无论何时添加新型号(可使用相同固件支持),都需要在一个地方进行更改。这是正确的吗

谢谢,

Subbarao

这听起来像是一个应用程序的用例。wiki中的示例(PHPONE,但仍然有助于理解这个想法)甚至使用了汽车


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

一个快速建议是使用枚举而不是int来标识模型。@Klaus同样,在几何域中,圆是椭圆,正方形是矩形。但在编程语言领域,如果你从椭圆等继承圆,你会很快发现为什么这是一个非常糟糕的想法。所有这些例子都是众所周知的,我请你们给予更多的考虑。干杯您的
get\u config
似乎是正确的(除了它应该返回常量指针)。我会做类似的事情。[OT]:注意<代码>。CAM=不是标准C++,而是扩展。我看,像是一个构造器模式最适合这里。我同意工厂模式可以是一种选择。我担心初始化代码分散在多个类中。此外,如果目标硬件的内存非常有限(如256MB),这是否有效?如果有4到5个类,每个类都需要派生30次,那么会有什么惩罚吗?我不能说效率,因为这在很大程度上取决于具体的实现。然而,256mb需要使用大量内存。您可以调整编译器以优化内存使用(主要与较慢的执行相结合)。如果您担心初始化代码。。你需要把它写在某个地方。也许您可以通过查找公共值来最小化初始化过程本身?例如,您使用与A相同的值初始化B类和C类,等等,更分散的东西(您的更新很好,因为它有助于更好地理解您的案例)。我认为这些设备保存着它们的初始化数据,并根据请求发送它们。通过这种方式,它们初始化自己(或多或少)。如果这是首选,工厂模式不是正确的选择