据我所知,C++ 中只有 3 个访问说明符:private、public、protected
使用这 3 个访问说明符,我怎样才能使一个方法对项目中的类可用但对“外国人”不可用??(如C# 中的内部和公共)
据我所知,C++ 中只有 3 个访问说明符:private、public、protected
使用这 3 个访问说明符,我怎样才能使一个方法对项目中的类可用但对“外国人”不可用??(如C# 中的内部和公共)
C++ 不知道项目是什么。
C++ 了解类,它提供了您提到的三个访问说明符。
C++ 知道翻译单元,它提供两个访问说明符:内部链接和外部链接。
编辑:关于内部和外部链接,这与是否会在翻译单元(目标文件)之外看到符号有关。TU 中定义的任何全局变量static
或const
变量都具有内部链接。其他人有外部联系。
简单地说,你没有。C++ 与 C# 不同。
如果您不想让某个类在给定库或可执行文件之外可用,那么就不要将头文件提供给项目的用户。
最接近解决方案的两件事是
有一个您在代码中使用的内部命名空间,但您并没有真正公开。然后,您的图书馆的用户使用您使用的任何用于公共消费的命名空间。但是,它没有被强制执行。它只是被混淆了,因为他们不一定知道命名空间或被告知不要使用它,所以他们没有。
使用朋友。这是由编译器强制执行的。如果一个类是另一个类的朋友,或者如果一个函数是一个类的朋友,那么它可以访问其私有成员函数,而其他人不能。不幸的是,这意味着朋友可以访问所有私有成员,因此它可以提供比您想要的更多访问各种类或函数的权限(尽管它会在您自己的类和函数中,而不是在您库的用户中)。
C++ 比 C#、Java 和 D 等语言更古老,它们让您可以更精细地控制访问级别。C++ 开创了很多这类东西,但并不总是正确。新语言的设计者从它身上学到了很多东西,并在很多方面对其进行了改进,所以你会在新语言中找到某些 C++ 所没有的概念(尽管有时 C++ 有一些新语言没有采用的概念)。其他示例是包和密封/最终类和函数。