내가 관련 세터/게터와 그 서브 클래스는 C++ (11) enum class
속성이 것 같은 클래스를 구축하기 위해 노력하고있어과 코드 재사용을 달성하기 위해 너무 좋아!어떻게 중첩 열거
// Base as before
class Derived : public Base {
public:
enum class MyEnum {
C,
D
}; // intention: to override Base's "my_enum" attribute
Derived(): Base() {
my_enum = MyEnum::C;
// ERROR: cannot convert 'Derived::MyEnum' to 'Base::MyEnum'
}
};
int main(int argc, char *argv[])
{
Derived Deriv;
// ERROR: no match for 'operator==' for types 'Base::MyEnum' and 'Derived::MyEnum'
Deriv.get() == Derived::MyEnum::C;
return 0;
}
내가 뭘 이해 : 모든 시간을/세터/게터를 다시 구현 속성을 가지고 있지 동안
그러나, 나는 파생 좋아할 클래스는 MyEnum
열거 클래스를 다시 정의 할 수 문제는; 이 경우 코드를 재사용 할 수있는 가장 깨끗한 방법을 찾고 있습니다.
바람직하게는 상속을 통해서만 (또는 오히려 Base()에서 파생 된 행위로 인해 Derived() 클래스에서 기능을 사용할 수 있어야합니다).
제안 사항?
이것은 의문의 여지가 있습니다. 열거 형을 기준으로 전환 하시겠습니까? 'enums'를 클래스로 대체하면 이중 상속 계층이 생깁니다. 그것이 속한 곳에서 행동을 수업 시간에 두십시오. –
@PeterWood : 다시 말해서, "그냥 그걸로 살아 가세요"(그리고 똑같은 setter/getter/속성 이름을 1 개의'enum'을 위해서가 아니라 수십 개의 파생 클래스에 복사하여 붙여 넣기)합니까? –
아니. 내가 말한 것을 어떻게 얻었는지 모르겠다. 나는 세터와 게터들을 피하려고 노력한다. 이것은'Strategy' 패턴을 사용하는 좋은 사례 인 것처럼 보입니다. 객체의 수명 동안 값이 바뀌면 'State' 패턴을, 그렇지 않으면'Visitor' 패턴을 사용합니다. –