C ++:用于多个变量值的类内部函数

时间:2011-07-31 04:04:05

标签: c++ function enums redefinition

有点像菜鸟问题。在一个名为'cell'的类中,我有一个枚举'Example'说

  typedef enum Example
  {
      E1=0,
      E2,
      E3,
      E4
  };
  Example inputValueE;

此外,我在类中有一个函数,如下所示

  void evolveE(Example type_);

在课外,我尝试定义几种类型的函数,如下所示

void cell::evolveE(Example type_ = E1){****some stuff****;};
void cell::evolveE(Example type_ = E2){****some diff stuff****;}; ***etc***

我已经玩过这些但没有运气。问题是我不允许重新定义相同的功能。我打算使用switch-case类型的命令,它始终是备份的,虽然我很确定有更优雅的方法来做到这一点

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

该语法设置默认参数。它与调用者传递的实际参数不匹配。使用switch / case

如果你想要花哨,你也可以使用函数指针的数组(或映射)。

答案 1 :(得分:1)

对于本声明:

void cell::evolveE(Example type_ = E1);

两点:

  1. 您在此处设置evolveE参数的默认值 没有让它采取enum
  2. 的类型
  3. 您不能基于任何类型的值重载函数;功能 只能使用不同类型和数量的参数重载
  4. 其中一个解决方案:

    您可以选择将每个值设为独立类型:

    enum E1 {};
    enum E2 {};
    enum E3 {};
    

答案 2 :(得分:0)

当重载一个函数(在一个类中提供多个具有相同名称的函数)时,你需要为每个函数提供一组不同的参数 types ,如下所示:

void cell::evolveE(Example type_){****some stuff****;}
void cell::evolveE(OtherExample size_){****some diff stuff****;}

请注意,这里,一个函数采用类型为Example的参数,另一个函数采用类型为OtherExample的参数。虽然您在尝试重载的函数中提供了不同的默认值,但两个函数都使用相同的参数 type ,因此编译器无法区分它们之间的区别。

你可以使用一个开关,虽然我更喜欢if / else,因为它不太容易出错。

如果Example枚举确实是您的类的类型,那么您可以使用多态。这是OOP的一个非常优雅的功能。那么你可以这样:

class cell
{
    ...
    virtual void evolveE() = 0;
};

class E1cell : public cell
{
    ...
    void evolveE()
    {
        // some stuff
    }
};

class E2cell : public cell
{
    ...
    void evolveE()
    {
        // some diff stuff
    }
};