2013年8月4日日曜日

アクセス制御について

以前、クラスの概念の記事でサンプルプログラム内にさらっと仕込んであった
アクセス指定子の説明です。

アクセス制御を使いこなすと他のオブジェクトに対してメンバを
隠蔽したり公開したりすることができます。

学生クラス(再掲)
class Student {    //クラス名
public:  //キーワード
  //メンバ関数 学生情報を設定する
  int SetStudentInfo(int num, char *name, int ja, int ma, int sci);
  //メンバ関数 学籍番号から3教科の合計点を求める   
    int GetSum(int student_num);   
private:   //キーワード
    int number;    //メンバ変数 学籍番号
    char name[20];    //メンバ変数 氏名
    int japanese;       //メンバ変数 国語
    int math;            //メンバ変数 数学
    int science;        //メンバ変数 理科
};

この public, private はアクセス指定子といいます。
アクセス指定子の後には「:(コロン)」が必要です。
アクセス指定子は、メンバへのアクセスを制御するためのラベルなのです。

public
publicメンバは、他のオブジェクトのメンバ関数や普通の関数からアクセスできます。
また、同じオブジェクト内のメンバ関数からもアクセスできます。

private
privateメンバは、他のオブジェクトのメンバ関数や普通の関数からアクセスできません。(^_^;)
同じオブジェクト内のメンバ関数からのみアクセスできます。


あと、アクセス指定子には protected というのがあります。
protectedはそのクラス単独で使うときはprivateと同じ扱いです。
継承を行った時にサブクラスから見るとpublicとして扱えるという違いがあります。
またまた、新しい言葉がしれっと登場していますね。詳しくは別の機会にしましょう。
今今はよく分からなくても全然OKです^^


アクセス指定子の記述
 見づらいこと極まりないですが、こんな書き方もできます。 

class Student {
public:
  int SetStudentInfo(int num, char *name, int ja, int ma, int sci); 
private:
    int number;  
    char name[20];
    int japanese;   
    int math;         
    int science;     
public:
    int GetSum(int student_num);   
}; 

 しかし、このようにバラバラでは可読性が著しく低下しますのでやっぱり一箇所にまとまって
 記述するのがいいでしょうね。(^_^;)

 また、クラスの中でアクセス指定子を記述しなかった場合はすべてprivateになります。
 意図して省略するしているならいいのですが、書き忘れているかもしれませんし、
 可読性を考えると、こちらもできれば記述したほうがよいでしょう。

アクセス指定子を全て省略してみました
class Student {
  int SetStudentInfo(int num, char *name, int ja, int ma, int sci); 
    int GetSum(int student_num);   
    int number;    
   char name[20];
    int japanese;   
    int math;         
    int science;     
}; 

とても違和感を覚えます(>_<)
 
 
今日の名言
 子どもの頃は不器用で体も弱かったので、青年になっても私は神経が落ち着かず、到底勇気を
持てる自信などなかった。私は肉体面だけでなく、精神面でも負けじ魂の面でも、徹底的に
鍛えなおす必要があったのだ。…少年時代の私は、マリアッドの小説の次の一説を繰り返し読んだ
ものだ。小説の主人公に向かって、イギリスの一小戦艦の艦長が、肝っ玉の座った人間になるには
どうすればよいか、教えているくだりである。
「はじめて戦場に出るのは、誰でも恐ろしいものだが、取るべき行動はただひとつ、戦闘など全然
怖くないと言ったかをで立ち向かうことだ。この態度を常にとり続けていると、見せかけでなく、本当に度胸が座ってくる。恐怖を知らぬ態度を繰り返しているうちに、いつの間にか本当に恐怖を感じなく
なり、度胸のある人間になるのだ」
 私はこの考えに従って恐怖を克服した。かつては灰色熊から暴れ馬、ガンマンにいたるまで、
ありとあらゆるものが怖かった。しかし怖くないようなふりをしていると、いつか本当に怖くなってきた。
その気になりさえすれば、たいていの物は私と同じ経験をすることができる。
                                         セオドア・ルーズヴェルト