C++, class with method and enum type - can method and enum value have same names? -
i have following class:
class washm_t  { public:     enum door_t { closed = 0, open = 1 }; private:     door_t door_state ; public:     int open() ; }; the problem class open name defined both name of method inside of class , value of enum type.
the question is: can somehow modify code both open names work inside of class or should pick other name open() method or open enum type value?
this how open() function looks like:
int washm_t::open() {     if(door_state == open)          // ~fails, 'open' interpreted name of method                                             //  not name of enum type value         return 1 ;     else         return door_state = open, 0 ; } 
in c++11 can use enum class:
enum class door_t { closed = 0, open = 1 }; but have refer door_t::open instead of open. has advantages , disadvantages of verboseness. enum class in these cases name conflict likely, , adds generic prefix enumerators of enumeration.
(actually, in c++11 don't need use class keyword. referring door_t::open resolves conflict no other change.)
you can arrive @ similar solution in c++03 putting enum inside class (hence syntax of c++11 feature)
struct door_state {     enum door_t { closed = 0, open = 1 }; }; you can make nested class, or define before washm_t , use base class
class washm_t : public door_state {     int open(); }; now the member open() overrides enumerator, enumerator still available door_state::open, , closed still available using same syntax before.
Comments
Post a Comment