【发布时间】:2012-09-02 10:35:59
【问题描述】:
Java 和 C++ 中的类默认是私有的还是公有的?
【问题讨论】:
标签: java c++ class-visibility
Java 和 C++ 中的类默认是私有的还是公有的?
【问题讨论】:
标签: java c++ class-visibility
Java:
默认情况下,类的可见性是包私有的,即仅对同一包中的类可见。
C++:
该类没有像 Java 中那样定义的可见性。如果您将它们包含在编译单元中,它们是可见的。
【讨论】:
在 Java 中,顶级 类要么是公共的,要么是非公共的。没有“私人”。您只能使用 public 关键字或将其关闭。如果您将其关闭,则它是非公开的,即仅对同一包中的其他类可见。
嵌套类,即另一个类中的一个类,可以像任何其他类成员一样设为公共、包私有、保护或私有。默认值(即没有修饰符的那个)是包私有的,仅对同一包中的类可见。
编辑:忘记了 C++ 答案,所以请参阅(并支持)@zeller 的答案。 :)
【讨论】:
如果顶级类或接口类型未声明为公共的,则只能从声明它的包内访问它。
所以,Java 类默认是 package-private。
但是,这不适用于 C++。一个类缺乏可见性——只有它的成员才能拥有访问控制。有关成员访问控制的信息,请参阅 C++11 标准的第 11 节。这是 ¶1...
的摘录一个类的成员可以是
private;也就是说,它的名称只能被声明它的类的成员和朋友使用。protected;也就是说,它的名字只能被它所在班级的成员和朋友使用 由派生自该类的类及其朋友声明(参见 11.4)。public;也就是说,它的名称可以在任何地方使用而不受访问限制。
【讨论】:
private,而对于 struct,它是公共的。