1

私は C++ は初めてで、Java には精通しています。C++ コードを調べ始めたときに最初に疑問に思ったのは、(メンバーではなく) クラス自体privateprotectedやなどのアクセス指定子がないことですpublic。例ここここ.

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

どうしてこんなことに?

4

4 に答える 4

10

言語にはpackageの概念がないため、クラスのレベルにアクセス修飾子はありません。しかし、データ メンバー、メンバー関数、および継承のレベルには次のようなものがあります。

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();}
  };

};
于 2012-06-04T20:20:23.800 に答える
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
};

注 1 C++ にも があります。これは、デフォルトのアクセス レベルが であることを除いて、structa と同じです。classpublic

注 2 C++ にはパッケージ スコープがありません。Java では、protectedパッケージ全体へのアクセスを提供します。C++ では、派生クラスへのアクセスのみを提供します。

注 3friendキーワードを使用して制限を回避できます。検索してください。

于 2012-06-04T20:17:43.617 に答える
0

C++ では、アクセス修飾子が個別ではなく宣言のグループに対して指定される、わずかに異なる構文を使用します。

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

  void privateByDefault();

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

private:
  void myPrivateFunction();

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

  void morePublicFunctions();

protected:
  // ...
};

Test::MyPrivateClass以外ではアクセスできませんがTestTest::MyPublicClassどこでも使用できます。

于 2012-06-04T20:17:50.677 に答える
-1

ソースから: http://www.cplusplus.com/doc/tutorial/classes

クラスのプライベート メンバーは、同じクラスの他のメンバー内またはその友達からのみアクセスできます。保護されたメンバーは、同じクラスのメンバーとその友人からアクセスできますが、派生クラスのメンバーからもアクセスできます。最後に、パブリック メンバーは、オブジェクトが表示されている場所ならどこからでもアクセスできます。

于 2012-06-04T20:20:13.567 に答える