为什么C++类没有Java类中的访问说明符?

Ofe*_*Ron 1 c++ privileges class

我是C++的新手,我熟悉Java.我想知道,当我开始寻找在C++代码的第一件事是,类本身(而不是成员)不具有访问说明这样的private,protectedpublic.这里这里都有例子.

public class A { // This line.
  private class B { } // Not this line.
}
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

jua*_*nza 10

在类级别没有访问修饰符,因为该语言没有包的概念.但是在数据成员,成员函数和继承的层面上:

class Foo {};
class Bar : public Foo {

 public:
  void bar() const {}
 private:
  int bar_(float) {}
  int a, b, c;

};
Run Code Online (Sandbox Code Playgroud)

最接近的是在类中声明嵌套类:

class Foo {

  struct Bar0 {
    void bar0() const {}
  };
  struct Bar1 {
    Bar0 b0;
    Bar1() { b0.bar0();}
  };

};
Run Code Online (Sandbox Code Playgroud)

  • 问题是为什么不呢? (2认同)
  • @OfekRon就像回答"为什么java在类级别具有访问控制"一样困难.没有包的概念或一组可以访问私有类的实体,这并不意味着什么.C++从来没有这个概念,我想从来没有必要引入它.最后,这是一个设计决定. (2认同)
  • @OfekRon:在Java中,所有类都在包中,并且将它们设为私有意味着它们只能在包中使用.在C++中,类默认位于_global_名称空间中.全局命名空间中的public/private是没有意义的.如果将它们移动到_any其他namespace_您可以将它们标记为私有/公共. (2认同)

Luc*_*ore 5

不需要类级访问说明符.如果您想要一个private类,可以在实现文件或匿名中定义它namespace.这种限制是在C++的文件级别完成的(即如何组织标头,预处理器指令).

编辑前:

他们这样做,但他们不是按方法.此外,类具有默认private说明符,因此,除非另有说明,否则它们是private.

class A
{
   void foo(); //private
};
class B
{
   void foo();  //private
public:
   void foo1(); //public
   void foo2(); //public
protected:
   void foo3(); //protected
private:
   void foo4(); //private
};
Run Code Online (Sandbox Code Playgroud)

注1 C++也有struct,class除了默认访问级别外,它与a 相同public.

注2: C++中没有包范围.在Java中,protected允许访问整个包,在C++中它只提供对派生类的访问.

注3:friend关键字可用于绕过限制,查找.

  • @OfekRon实际上,你没有正确地说出这个问题. (4认同)
  • @OfekRon你不应该因为你没有正确地说出来而准确地回答一个愚蠢的问题.你很幸运有人回答了. (2认同)