第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入門基礎講座