繁体   English   中英

C ++访问说明符,太少了?

[英]C++ access specifiers, too few?

据我所知,C ++中只有3个访问说明符: privatepublicprotected

使用这3个访问说明符,我如何使方法用于项目中的类不可用于“外国人”(例如C#中的内部公共

C ++不知道什么是项目。

C ++了解类,在其中提供了您提到的三个访问说明符。

C ++知道翻译单元,它提供两个访问说明符:内部和外部链接。

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

简单地说,你没有。 C ++不同于C#。

如果您不想使类在给定的库或可执行文件之外可用,则只需不将头文件提供给项目的用户。

您可以使用密码键朋友惯用语

不过,这不是您可以搜索的术语。 这个想法并不新奇,尽管并不十分普遍,但这种想法在SO上出现了。 上面的链接是我对通用解决方案的尝试(在C ++ 03中不可能干净地完成,而在C ++ 0x中很漂亮)。

我确定还有其他方法可以尝试执行此操作,但是由于某种原因,我在上面有附件... :)


但是否则, 不会 一个更常见,更简单的解决方案是将您的内容放到一个detail名称空间中(例如,在整个Boost中是常见的),然后说“不要去那里”。

您必须要解决的两件事是

  1. 有一个在您的代码中使用的内部名称空间,您并未真正对其进行宣传。 然后,库的用户使用您打算用于公共消费的任何命名空间。 但是,它不是强制性的。 只是因为他们不一定了解名称空间或被告知不要使用它,所以他们就不知道了。

  2. 使用朋友。 由编译器强制执行的。 如果一个类是另一个类的朋友,或者一个函数是一个类的朋友,则它可以访问其私有成员函数,而其他人则不能。 不幸的是,这意味着该朋友可以访问所有私有成员,因此它可以提供比您想要的更多的访问各种类或函数的权限(尽管它将在您自己的类和函数之内,而不是您的库用户的访问权) )。

C ++比诸如C#,Java和D之类的语言要老,它们使您可以更精细地控制访问级别。 C ++开创了很多这类东西,但并非总是能做到正确。 较新的语言的设计师已从中学习并进行了许多改进,因此,您将在C ++中没有的新语言中找到某些概念(尽管有时C ++具有较新的语言未采用的概念)。 其他示例是包装和密封/最终类和功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM