[英]Encapsulating child classes
我有一大堆的類Bar1
, Bar2
等,它們都有一個共同的父類Foo
。 我想完全隱藏它們,並僅通過Foo
的虛擬方法提供的接口訪問它們。 我試圖像這樣將它們嵌套為Foo
私有類:
class Foo
{
public:
Foo ();
static Foo *MakeBar (int someParams);
private:
class Bar1 : public Foo
{
Bar1 () : Foo () {}
};
class Bar2 : public Foo
{
Bar2 () : Foo () {}
};
// etc
};
但是,這是不可能的,因為在聲明類Bar1
時,類Foo
不完整。 還有其他方法可以防止直接訪問子類嗎?
嘗試將繼承的類從類聲明移至實現單元中的未命名名稱空間。 像這樣:
class Foo
{
public:
Foo ();
static Foo *MakeBar (int someParams);
};
#include "foo.h"
namespace {
class Bar1 : public Foo
{
Bar1 () : Foo () {}
};
class Bar2 : public Foo
{
Bar2 () : Foo () {}
};
} // endof unnamed namespace
Foo *Foo::MakeBar (int someParams)
{
// do stuff here
}
您可以通過拆分類的聲明來完全按照自己的意願進行操作(將Bar類對Foo專用):
class Foo
{
public:
Foo ();
static Foo *MakeBar (int someParams);
private:
class Bar1;
class Bar2;
// etc
};
class Foo::Bar1 : public Foo
{
Bar1 () : Foo () {}
};
class Foo::Bar2 : public Foo
{
Bar2 () : Foo () {}
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.