Java和C ++中默认是私有类还是公共类?

默认情况下,Java和C ++中的类是私有的还是公共的?

  • Java

    默认情况下,类可见性是包私有的,即仅对同一包中的类可见。

  • C ++

    该类没有像Java那样定义的可见性。 如果将它们包含在编译单元中,它们是可见的。

在Java中, 顶级类是公共类或非公共类。 没有“私人”。 您只能使用public关键字或将其关闭。 如果您将其关闭,则它是非公开的,即仅对同一包中的其他类可见。

嵌套类,即另一个类中的类,可以像其他任何类成员一样,成为public,package-private,protected或private。 默认值(即没有修饰符的那个)是包私有的,仅对同一包中的类可见。

编辑:忘记C ++答案,所以看看(和upvote)@ zeller的答案。 🙂

根据JLS的§6.6.1 ,

如果顶级类或接口类型未声明为public,则只能从声明它的包中访问它。

因此,Java类默认是package-private

但是,这不适用于C ++。 类缺乏可见性 – 只有其成员才能拥有访问控制权。 有关成员访问控制的信息,请参阅C ++ 11标准的第11节。 这是¶1的摘录……

一个class级的成员可以

  • private 也就是说,它的名称只能由声明它的类的成员和朋友使用。
  • protected 也就是说,它的名称只能由声明它的类的成员和朋友,从该类派生的类以及他们的朋友使用(见11.4)。
  • public 也就是说,它的名称可以在没有访问限制的任何地方使用。