第26講 クラスの学習その1☆☆
第8話 公開(public)と非公開(private)

クラスKの宣言については、
class K{
  メンバー変数;
  メンバー関数;
};
という宣言方法もあります。
structとは構造という意味で、C言語では構造体の宣言に使われていましたが、
C++以降では構造体が発展し、クラスとなったのです。
構造体とクラスに違いは、
構造体においては、フィールド=メンバー変数のみで構成されており、
メソッド=メンバー関数がなかったのです。
ですから、構造体にメソッドを加えたのがクラスというわけです。
class K{
  メンバー変数;
  メンバー関数;
};
という宣言方法はclass(クラス)を使っていて、はじめからクラスの宣言であることがわかります。

では、
class K{
  メンバー変数;
  メンバー関数;
};

class K{
  メンバー変数;
  メンバー関数;
};
の違いは何でしょうか。
全然変わりがないのでしょうか
試しに、先のプログラムを
   ・
   ・
class K{
  //フィールド
  char a[3][40];
  char as[3][40];

  char kok[40],sya[40],suu[40],rik[40],eig[40];
  int d[3][5];

  //メソッド
  void f1(char* na,char* nb,char* nc); //名前の取得
  void f2(char* sa,char* sb,char* sc); //性別の取得
  void f3(int nm,int d1,int d2,int d3,int d4,int d5); //得点の取得

};
    ・
    ・
    ・
}
と変更してビルドしてみましょう。
今回は、「1>組2.cpp(93): error C2248: 'K::d' : private メンバー (クラス 'K' で宣言されている) にアクセスできません。」
などと出てエラーしてしまいました。
「private メンバー (クラス 'K' で宣言されている) にアクセスできません。」とはどういう意味でしょうか。
実は、デフォルトでは、
classでクラスを宣言した場合は、privateでの宣言であり、
structでクラスを宣言した場合は、publicでの宣言の違いがあります。
classに変更したためのエラーは、次のようにすると解消できます。
class K{
public:
  //フィールド
  char a[3][40];
  char as[3][40];

  char kok[40],sya[40],suu[40],rik[40],eig[40];
  int d[3][5];

  //メソッド
  void f1(char* na,char* nb,char* nc); //名前の取得
  void f2(char* sa,char* sb,char* sc); //性別の取得
  void f3(int nm,int d1,int d2,int d3,int d4,int d5); //得点の取得

};

privateの意味は、

という意味なのです。
classでの宣言の場合、デフォルトではprivateでの宣言ということになってますので、
class K{
  //フィールド
  char a[3][40];
  char as[3][40];

  char kok[40],sya[40],suu[40],rik[40],eig[40];
  int d[3][5];

  //メソッド
  void f1(char* na,char* nb,char* nc); //名前の取得
  void f2(char* sa,char* sb,char* sc); //性別の取得
  void f3(int nm,int d1,int d2,int d3,int d4,int d5); //得点の取得

};
としたとき、mainからアクセスできないわけです。
それに対して、publicの場合は外からもアクセスできます。
つまり、privateは非公開であるのに対して、publicは公開であるといいうわけです。
classでの宣言でもstructでの宣言でも、public(公開)であるか、private(非公開)であることを明示したい場合は、
class K{
public:
  メンバー変数;
  メンバー関数;
private:
  メンバー変数;
  メンバー関数;
};
struct K{
public:
  メンバー変数;
  メンバー関数;
private:
  メンバー変数;
  メンバー関数;
};
とします。このように宣言した場合は、classとstructには何の違いもありません。
違いは、public:とprivate:を省略した場合、すなわち
class K{
  メンバー変数;
  メンバー関数;
};
struct K{
  メンバー変数;
  メンバー関数;
};
は、自動的に
class K{
private:
  メンバー変数;
  メンバー関数;
};
struct K{
public:
  メンバー変数;
  メンバー関数;
};
と同じになるということです。
プログラミングするときには、自分のためにもそれを読む人のためにも、わかりやすいコーティングをする必要があります。
すると、
class K{
public:
  メンバー変数;
  メンバー関数;
private:
  メンバー変数;
  メンバー関数;
};
struct K{
public:
  メンバー変数;
  メンバー関数;
private:
  メンバー変数;
  メンバー関数;
};
のように明示的に宣言した方がよいということになります。

次講では、メソッドをクラス内で定義する方法について、述べてみたいと思います。



第7話へ 第27講第1話へ

戻る

VC++講義第1部へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座