簡體   English   中英

封裝子類

[英]Encapsulating child classes

我有一大堆的類Bar1Bar2等,它們都有一個共同的父類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不完整。 還有其他方法可以防止直接訪問子類嗎?

嘗試將繼承的類從類聲明移至實現單元中的未命名名稱空間。 像這樣:

foo.h

class Foo
{
public:
    Foo ();
    static Foo *MakeBar (int someParams);
};

foo.cpp

#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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM