0

私自身のイテレータを実装するために、私は次のようなものを実装したいと思います:

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

これらのイテレータはいくつかの共通の動作を共有するため、と呼ばれる基本イテレータから継承する方がよいでしょうMyBaseIterator。しかし、私MyBaseIteratorは実装の詳細として考えています。ユーザーはMyClass::MyBaseIterator直接使用すべきではありません。次は大丈夫ですか:

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

から派生したメンバーは、保護されMyBaseIteratorている場合でもユーザーが利用できますか?MyBaseIterator

4

1 に答える 1

1

はい、ユーザーが拡張しない限りMyClass。アクセスを完全に拒否するには、非公開にします。MyBaseIteratorまた、クラス内でしか意味のあることを実行できないわけではありません(すでにそれを知っていると思います)。

また、実装の詳細を完全に隠すには、pimplイディオムを調べる必要があります。

于 2012-08-23T17:24:39.450 に答える