首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >封装子类

封装子类
EN

Stack Overflow用户
提问于 2014-12-12 10:48:34
回答 1查看 59关注 0票数 1

我有很多类Bar1Bar2等等,它们都共享一个公共的父类Foo。我想把它们完全隐藏起来,只想通过Foo的虚拟方法提供的接口来访问它们。我试图将它们嵌套为Foo的私有类,比如:

代码语言:javascript
运行
复制
class Foo
{
    public:
        Foo ();
        static Foo *MakeBar (int someParams);

    private:
        class Bar1 : public Foo
        {
            Bar1 () : Foo () {}
        };

        class Bar2 : public Foo
        {
            Bar2 () : Foo () {}
        };

        // etc
};

但是,这是不可能的,因为Foo类在声明类Bar1时是不完整的。是否有任何其他方法来防止直接访问子类?

EN

回答 1

Stack Overflow用户

发布于 2014-12-12 11:02:22

尝试将继承的类从类声明移动到实现单元中的未命名命名空间。就像这样:

foo.h

代码语言:javascript
运行
复制
class Foo
{
public:
    Foo ();
    static Foo *MakeBar (int someParams);
};

foo.cpp

代码语言:javascript
运行
复制
#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
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27441984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档