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

时间:2012-06-04 20:15:37

标签: c++ class privileges

我是C ++的新手,我熟悉Java。我开始关注C ++代码的第一件事就是类本身(而不是成员)没有访问说明符privateprotectedpublic。例如herehere

public class A { // This line.
  private class B { } // Not this line.
}

为什么会这样?

4 个答案:

答案 0 :(得分:10)

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

class Foo {};
class Bar : public Foo {

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

};

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

class Foo {

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

};

答案 1 :(得分:5)

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

编辑前:

他们这样做,但他们不是 per-method 。此外,类具有默认的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
};

注1 C ++也有struct,与class相同,但默认访问级别为public

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

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

答案 2 :(得分:0)

C ++使用稍微不同的语法,其中为声明组而不是单独指定访问修饰符:

class Test {
  class MyPrivateClass {
    // ...
  };

  void privateByDefault();

public:
  void myPublicFunction();
  void anotherPublicFunction();

private:
  void myPrivateFunction();

public:
  class MyPublicClass {
    // ...
  };

  void morePublicFunctions();

protected:
  // ...
};
Test::MyPrivateClass之外无法访问

Test,而Test::MyPublicClass可以在任何地方使用。

答案 3 :(得分:-1)

来自您的来源:http://www.cplusplus.com/doc/tutorial/classes

  

类的私有成员只能从其他成员访问   同一个班级的成员或他们的朋友。受保护的成员是   可以从同一个班级的成员和他们的朋友那里获得,   但也来自派生类的成员。最后,公开   可以从对象可见的任何地方访问成员。