在课堂上使用枚举会是公开的,为什么?

时间:2012-08-14 16:37:24

标签: c++ enums private public

我正在使用enum进行我正在处理的课程,我正在使用Google查找示例以确保我正确使用枚举。我去了几个网站,包括MSDN网站和枚举列在公共而不是私人。我一直认为数据成员是私有的。我是不是基地,如果是这样的话为什么?

4 个答案:

答案 0 :(得分:18)

枚举是一种类型,而不是数据成员。如果班级的用户需要了解它,你应该公开它;否则,将其设为私有。用户需要了解它的典型情况是它被用作公共成员函数的参数类型。

答案 1 :(得分:4)

枚举不是数据成员,它们是常量/类型。如果您不公开它们,那么其他类不能使用枚举名称与定义enum的类进行交互:

class A {
  public:
    void func(enumtype e) { if (e == e1) dostuff(); }
  private:
    typedef enum {e1, e2} enumtype;
};

int main() {
  A a;
  a.func(e1); // error: enumtype is private, e1 is not visible here
  return 0;
}

答案 2 :(得分:3)

这些枚举可能在类接口中使用,对吧?否则,保持private

确实更加清晰

答案 3 :(得分:1)

公开enum数据在模板元编程中大量使用(请参阅Boost.MPL

#include <iostream>

template <int N>
struct Factorial {
    enum { value = N * Factorial<N - 1>::value };
};

template <>
struct Factorial<0> {
    enum { value = 1 };
};

int main()
{
    auto const f10 = Factorial<10>::value; // done at compile-time
    std::cout << f10 << "\n";              // prints 3628800

    return 0;
}

Ideone上的输出。这里公开使用enum的原因是结构是用于将中间计算传输到顶级调用者的简单工具,并且不需要封装。它是编译时函数评估的粗略形式,其中struct充当函数范围,enum充当返回值。