首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何隔离班级?

如何隔离班级?
EN

Stack Overflow用户
提问于 2012-07-20 18:06:21
回答 2查看 387关注 0票数 1

foo.h

代码语言:javascript
复制
class Foo {};

namespace {
    class Bar {};
   //...
}

foo.cpp

代码语言:javascript
复制
Foo foo; // Ok

Bar bar; // Ok, but I want Error!

如何在*.cpp文件中隐藏(隔离)类栏?

也就是说,我不想将class Bar {}从*.h文件导入到*.cpp文件中

也许有某种类型的类封装技术?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-20 18:14:16

还不清楚你到底想要什么。如果您只希望Bar在特定的.cpp文件中可见,这非常容易:

F.h:

代码语言:javascript
复制
// add include guard here.
class Foo {};

foo.cpp:

代码语言:javascript
复制
#include "foo.h"

namespace {
    class Bar {};
}

Foo foo;

Bar bar;

请注意,这将Bar的所有可见性限制为foo.cppfoo.cpp之外的任何东西都不会意识到它的存在。

实际上,没有一种方法可以使类只在头文件中可见--标题的全部意义是将其包含在一个或多个.cpp文件中,当您这样做时,它包含的内容在该.cpp文件中变得可见。

如果你认为这是你想要的,那么很有可能你需要后退一步,告诉我们你真正想要达到的目标。也许有办法,但你想要的方式几乎肯定是错的。基本的划分是,标题用于一般可见的内容;任何私有的内容都被限制为实现(.cpp)文件。

票数 4
EN

Stack Overflow用户

发布于 2012-07-20 18:19:56

这个怎么样?

代码语言:javascript
复制
class Foo
{
private:
     struct Bar
     {

     };

     void func()
     {
         Bar b; //ok
     }
};


int main()
{

    Foo f; //ok
    Foo::Bar b; //error


    return 0;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11584689

复制
相关文章

相似问题

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