2012-08-23 3 views
0

,이 같은 것을 구현하고 싶습니다 : 그들은 MyBaseIterator라는 기본 반복자에서 상속하는 경우 몇 가지 일반적인 행동을 공유하는이 반복자로보호 된 중첩 클래스에서 상속하는 공용 중첩 클래스? 내 자신의 반복자를 구현하기 위해

class MyClass : 
{ 
    public: 
     class MyIterator1 {;}; 
     class MyIterator2 {;}; 
     class MyIterator3 {;}; 
}; 

, 그것은 더 좋을 것이다. 그러나 구현의 세부 사항으로 MyBaseIterator을 고려합니다. 사용자는 MyClass::MyBaseIterator을 직접 사용하면 안됩니다.

class MyClass : 
{ 
    protected: 
     class MyBaseIterator; 
    public: 
     class MyIterator1 : public MyBaseIterator {;}; 
     class MyIterator2 : public MyBaseIterator {;}; 
     class MyIterator3 : public MyBaseIterator {;}; 
}; 

MyBaseIterator에서 파생 된 멤버는 사용자가 사용할 수 MyBaseIterator 보호되는 경우에도 다음 OK인가?

+0

하나의 클래스에서 3 개의 diff 반복자가 필요하도록 생성하려는 컬렉션 유형은 무엇입니까? 0o –

답변

1

예 (사용자가 MyClass을 확장하지 않는 한). 액세스를 완전히 거부하려면 비공개로 설정하십시오. 또한, 당신은 단지 그 안에있는 MyBaseIterator으로 의미있는 것을 할 수 없다는 것을 기억하십시오.

또한 구현 세부 사항을 완전히 숨기려면 pimpl idiom을 조사해야합니다.

관련 문제