[英]C++ access specifiers, too few?
据我所知,C ++中只有3个访问说明符: private , public , protected
使用这3个访问说明符,我如何使方法可用于项目中的类,但不可用于“外国人”(例如C#中的内部和公共 )
C ++不知道什么是项目。
C ++了解类,在其中提供了您提到的三个访问说明符。
C ++知道翻译单元,它提供两个访问说明符:内部和外部链接。
编辑:关于内部和外部链接,这与是否在翻译单元(目标文件)之外看到符号有关。 TU中定义的任何全局static
或const
变量都具有内部链接。 其他人有外部联系。
简单地说,你没有。 C ++不同于C#。
如果您不想使类在给定的库或可执行文件之外可用,则只需不将头文件提供给项目的用户。
您必须要解决的两件事是
有一个在您的代码中使用的内部名称空间,您并未真正对其进行宣传。 然后,库的用户使用您打算用于公共消费的任何命名空间。 但是,它不是强制性的。 只是因为他们不一定了解名称空间或被告知不要使用它,所以他们就不知道了。
使用朋友。 这是由编译器强制执行的。 如果一个类是另一个类的朋友,或者一个函数是一个类的朋友,则它可以访问其私有成员函数,而其他人则不能。 不幸的是,这意味着该朋友可以访问所有私有成员,因此它可以提供比您想要的更多的访问各种类或函数的权限(尽管它将在您自己的类和函数之内,而不是您的库用户的访问权) )。
C ++比诸如C#,Java和D之类的语言要老,它们使您可以更精细地控制访问级别。 C ++开创了很多这类东西,但并非总是能做到正确。 较新的语言的设计师已从中学习并进行了许多改进,因此,您将在C ++中没有的新语言中找到某些概念(尽管有时C ++具有较新的语言未采用的概念)。 其他示例是包装和密封/最终类和功能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.