web-dev-qa-db-ja.com

C ++プライベート構造

クラスと構造体(関数以外)の主な違いは、クラスメンバーはデフォルトでプライベートになり、構造体メンバーはデフォルトでパブリックになることを読みました。

これは、構造体のメンバーがプライベートであることを意味します。私の質問は次のとおりです。プライベート構造のメンバーを持つことはできますか?できれば、プライベートメンバーを使用する目的は何ですか?どのようにしてそれらにアクセスしますか?

20
Dasaru

はい、構造体はプライベートメンバーを持つことができます。同じためにアクセス指定子を使用する必要があるだけです。

struct Mystruct
{
    private:
       m_data;

};

構造とクラスの違いのみ:

  • アクセス指定子のデフォルトは、クラスの場合はプライベート、構造体の場合はパブリックです。
  • 継承のデフォルトは、クラスの場合はプライベート、構造体の場合はパブリックです。

どうすればそれらにアクセスできますか?
クラスのプライベートメンバーにアクセスするように。つまり、構造体メンバー関数内でのみアクセスでき、派生構造体ではアクセスできません。

25
Alok Save

onlystructclassの違いはデフォルトのアクセスです(一部の奇妙なテンプレートの状況を除き、以下のAlfのコメントを参照してください)。つまり、クラスと同じ方法でプライベートメンバーにアクセスできます。

struct foo {
  int get_X() { return x; }
  void set_X(int x_) { x = x_; }
private:
  int x;
};

structまたはclassを使用するかどうかは、純粋にスタイルの問題です。すべてのメンバーがパブリックである場合(たとえば、メンバー変数がなくパブリック関数のみのファンクタークラスである場合)、structを使用する傾向があります。

3
bdonlan

これを便利にする1つの点は、構造体でフレンドキーWordを使用することもできるため、プライベートメンバーは、特定の関数またはクラスによってのみ使用および変更できるか、それを変更したくないものだけです。この方法では、ユーザーはそれらのセクション自体を変更できません。それらは、少なくともビジュアルスタジオでは、自動入力機能にも表示されません。

0
Peter Addy