C++ C++;访问说明符太少?

C++ C++;访问说明符太少?,c++,access-specifier,C++,Access Specifier,据我所知,C++中只有3个访问说明符:私有的,公共的,受保护的 有了这3个访问说明符,我如何使一个方法对项目中的类可用而对“外国人”不可用呢 C++了解类,它提供了您提到的三个访问说明符 C++了解翻译单元,其中提供了两个访问说明符:内部链接和外部链接 编辑:关于内部和外部链接,这与是否在翻译单元(对象文件)之外看到符号有关。TU中定义的任何全局static或const变量都具有内部链接。其他人有外部链接。C++不知道项目是什么 C++了解类,它提供了您提到的三个访问说明符 C++了解翻译单元,

据我所知,C++中只有3个访问说明符:私有的公共的受保护的


有了这3个访问说明符,我如何使一个方法对项目中的类可用而对“外国人”不可用

C++了解类,它提供了您提到的三个访问说明符

C++了解翻译单元,其中提供了两个访问说明符:内部链接和外部链接


编辑:关于内部和外部链接,这与是否在翻译单元(对象文件)之外看到符号有关。TU中定义的任何全局
static
const
变量都具有内部链接。其他人有外部链接。

C++不知道项目是什么

C++了解类,它提供了您提到的三个访问说明符

C++了解翻译单元,其中提供了两个访问说明符:内部链接和外部链接


编辑:关于内部和外部链接,这与是否在翻译单元(对象文件)之外看到符号有关。TU中定义的任何全局
static
const
变量都具有内部链接。其他人有外部链接。

简单地说,你没有。C++不是C语言的任何一种。
如果你不想让一个类在给定的库或可执行文件之外可用,那么就不要向项目的用户提供头文件。

简单地说,你没有。C++不是C语言的任何一种。 如果您不想使类在给定库或可执行文件之外可用,则不要向项目用户提供头文件。

您可以使用

不过,这不是一个你可以搜索的术语。这个想法并不新鲜,虽然不是很普遍,而且是在这种情况下产生的。上面的链接是我尝试的一个通用解决方案(在C++03中不可能做到干净,在C++0x中很漂亮)

我相信还有其他方法可以尝试,但出于某种原因,我对上述内容有一个附件…:)


但除此之外。一个更常见、更简单的解决方案是将您的内容放入
详细信息
名称空间(例如,整个名称空间都是通用的),然后说“不要去那里”。

您可以使用

不过,这不是一个你可以搜索的术语。这个想法并不新鲜,虽然不是很普遍,而且是在这种情况下产生的。上面的链接是我尝试的一个通用解决方案(在C++03中不可能做到干净,在C++0x中很漂亮)

我相信还有其他方法可以尝试,但出于某种原因,我对上述内容有一个附件…:)



但除此之外。一个更常见、更简单的解决方案是将您的内容放入
详细信息
名称空间(例如,在整个名称空间中都很常见),然后说“不要去那里”。

与解决方案最接近的两件事是

  • 在代码中使用一个内部名称空间,而您并没有真正公开它。然后,您的库的用户使用您所使用的任何用于公共消费的名称空间。然而,它并没有被强制执行。这只是因为他们不一定知道名称空间,或者被告知不要使用名称空间,所以他们不知道

  • 利用朋友。这是由编译器强制执行的。如果一个类是另一个类的朋友,或者一个函数是一个类的朋友,那么它可以访问它的私有成员函数,而其他人不能。不幸的是,这意味着friend可以访问所有私有成员,因此它可以提供比您希望的更多的对各种类或函数的访问权限(尽管它将在您自己的类和函数中,而不是在库用户的类和函数中)


  • C++比C#、Java和D等语言更古老,这些语言可以对访问级别进行更细粒度的控制。C++开创了很多这样的东西,但它并不总是正确的。新语言的设计者已经从中学习并在很多方面改进了它,所以你将发现一些新的语言,C++中没有某些概念(尽管有时C++有新语言没有采纳的概念)。另一个例子是包和密封的/最终的类和函数

  • 在代码中使用一个内部名称空间,而您并没有真正公开它。然后,您的库的用户使用您所使用的任何用于公共消费的名称空间。然而,它并没有被强制执行。这只是因为他们不一定知道名称空间,或者被告知不要使用名称空间,所以他们不知道

  • 利用朋友。这是由编译器强制执行的。如果一个类是另一个类的朋友,或者一个函数是一个类的朋友,那么它可以访问它的私有成员函数,而其他人不能。不幸的是,这意味着friend可以访问所有私有成员,因此它可以提供比您希望的更多的对各种类或函数的访问权限(尽管它将在您自己的类和函数中,而不是在库用户的类和函数中)


  • C++比C#、Java和D等语言更古老,这些语言可以对访问级别进行更细粒度的控制。C++开创了很多这样的东西,但它并不总是正确的。新语言的设计者已经从中学习并在很多方面改进了它,所以你将发现一些新的语言,C++中没有某些概念(尽管有时C++有新语言没有采纳的概念)。另一个例子是包和密封的/最终的类和函数。

    1+-回答得不错,但也许你应该详细说明一下链接位+1,从那里你可以计划几种方法来隔离代码。不