为了实现我自己的迭代器,我想实现这样的东西:
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
的成员是否可供用户使用?
答案 0 :(得分:1)
是的,除非用户延伸MyClass
。要完全拒绝访问,请将其设为私有。另外,并不是说你只能在课堂上对MyBaseIterator
做任何有意义的事情(猜你已经知道了)。
另外,要完全隐藏实现细节,您应该查看 pimpl idiom 。