第27講 クラスの学習その2☆☆
第2話 コンストラクタの利用例
最初にコンストラクタの利用例を示しましょう。
コード例
#include<iostream>
using namespace std;

class hito{
  public:
  int t;
  char *n;
  hito(int a,char *b){
    this->t=a;
    this->n=b;
  }
};

void main(){
  hito taro(25,"太郎");
  cout<<"名前:"<<taro.n<<" "<<"年齢:"<<taro.t<<endl;
}
実行画面例


インスタンス(具体化)taroを作成する際に、
年齢と名前を初期条件として入れています。
コンストラクタ
  hito(int a,char *b){
    this->t=a;
    this->n=b;
  }
this->t とはこのクラスのtを意味します。
実は、上のコード例ではthis->は省略しても差し支えありません。
つまり、
#include<iostream>
using namespace std;

class hito{
public:
  int t;
  char *n;
  hito(int a,char *b){
    t=a;
    n=b;
  }
};

void main(){
  hito taro(25,"太郎");
   cout<<"名前:"<<taro.n<<" "<<"年齢:"<<taro.t<<endl;
}
入れなければならない場合は、
#include<iostream>
using namespace std;

class hito{
  public:
  int
t;
  char
*n;
  hito(int
t,char *n){
    this->t=t;
    this->n=n;
  }
};

void main(){
  hito taro(25,"太郎");
  cout<<"名前:"<<taro.n<<" "<<"年齢:"<<taro.t<<endl;
}
のように、関数の引数とクラスの変数名を同じにする場合です。
つまり this->t=t;のtは同じtであっても、
#include<iostream>
using namespace std;

class hito{
public:
  int
t;
  char *n;
  hito(int
t,char *n){
    this->
t=t;
    this->n=n;
  }
};

void main(){
  hito taro(25,"太郎");
   cout<<"名前:"<<taro.n<<" "<<"年齢:"<<taro.t<<endl;
}

this->t のtはクラスのtであり、左辺のtは引数のtです。
引数で使う変数名は自由でした。
だから、わかりやすさを優先するならば、
クラスの変数名と同じにした方がよいわけです。
この講義に方針で、変数名を短くしてきましたが、
わかりやすさからいえば
#include<iostream>
using namespace std;

class hito{
public:
  int toshi;
  char *namae;
  hito(int toshi,char *namae){
    this->toshi=toshi;
    this->namae=namae;
  }
};

void main(){
  hito taro(25,"太郎");
   cout<<"名前:"<<taro.namae<<" "<<"年齢:"<<taro.toshi<<endl;
}
のようにコーティングした方がよいわけです。
初期化関数コンストラクタの引数名とクラスの変数名を同じにすると、
プログラムを読む人にとって、引数の意味は一目瞭然となるわけです。
変数名やクラス名は自由につけられますので、
#include<iostream>
using namespace std;

class Person{
public:
  int age;
  char *name;
  Person(int age,char *name){
    this->age=age;
    this->name=name;
  }
};

void main(){
  Person taro(25,"太郎");
  cout<<"名前:"<<taro.name<<" "<<"年齢:"<<taro.age<<endl;
}
のように英単語を使ってもよいわけです。
英単語を使ってしまうと、初心者の方はそこに意味があると思ってしまいますので、
この講義では、あえて英単語を使わないで来ました。
でも、ここまで読んできた皆さんにはもう変数名には何の意味もないことはお分かりですね。
ただの名前にすぎず意味はないのです。
『ポチ』はただの名前で、そこに意味はありませんね。
意味がありませんね、というともちろんいいすぎです。
他と区別するという意味はあるからです。
変数名やクラス名もその意味は、他と区別するということにつきます。
引き数名もクラス名も変数名も自由に使えます。
ですから、わかりやすさを優先して引き数名とクラスの変数名を同じにしてもよいのです。
ただ、そうするとageと書いたとき、引数のageなのか、クラスのメンバーの変数のageなのか、区別が付きません。
そこで、区別するためにthis->を付けるわけです。
->の意味は『の』でしたね。thisはこれですから、this->でこのクラスのという意味になるのです。
上のコーティグレイではクラスPersonのメンバー変数ageということになります。


各種の入門書では、いきなり
#include<iostream>
using namespace std;

class Person{
public:
  int age;
  char *name;
  Person(int age,char *name){
    this->age=age;
    this->name=name;
  }
};

void main(){
  Person taro(25,"太郎");
  cout<<"名前:"<<taro.name<<" "<<"年齢:"<<taro.age<<endl;
}
と書いてしまいます。これは初心者を混乱させるだけです。
短い変数を使い理解できた時点で長い英単語に変えていくという、
説明方針をとるべきです。
このVC++講義は、幸いにして2011年7月30日現在Googleおいて
『Visual C++ 入門』『Visual C++ 初心者』『Visual C++ 基礎』『Visual C++ 初歩』『Visual C++ 応用』『Visual C++ 講義』
『VC++ 入門』『VC++ 初心者』『VC++ 基礎』『VC++ 講義』
『VC 入門』『VC 初心者』『VC 基礎』『VC 講義』
『C++ 応用』『C++ 講義』のすべてで1位にランクされています。
#include<iostream>
using namespace std;

class Person{
public:
  int age;
  char *name;
  Person(int age,char *name){
    this->age=age;
    this->name=name;
  }
};

void main(){
  Person taro(25,"太郎");
  cout<<"名前:"<<taro.name<<" "<<"年齢:"<<taro.age<<endl;
}
のようなコーティングが如何に初心者を苦しめていたかを如実に示しているといってよいでしょう。
でなければ、プログラムの素人である高校教諭(情報の免許を持っているとはいえ、基本的には数学教諭)のサイトが
トップになるわけはありません。
VC++入門講義は、プロのプログラマーやプログラムを専門とする大学の先生方が、
たくさん書かれているわけです。
プログラマーや大学の先生方が運営されているVC++入門サイトは、少なく見積もっても100を下ることはありません。
実際にGoogleで『VC++ 入門』で検索すると、約 583,000 件 もヒットします。
『VC++ 基礎』に至っては、約 3,420,000 件 のヒット数です。
340万のページ数があると出てくるわけです。
もちろん、この中には重複も相当あるわけですから、
VC++入門系のサイトが100万単位であるとは言えません。

しかし、1万も重複している事も考えられませんので、
おそらく、VC++入門系のサイトは、1000を超えているはずです。
これらのサイトを抑えて、私のサイトがダントツのトップになっていることが、
長い英単語が如何に初心者の理解の妨げになっていることを示しています。

このサイトをきっかけに、変数名の付け方に革命が起きるでしょう。
長い英単語からわかりやすい短い変数名へと!

さて、また脱線してしまいました。
皆さん、taro以外のインスタンスを数名加えましょう。
また、コンストラクタの内容も年齢と名前ばかりでなく、
内容を豊富にしましょう。

もちろん、その際にはメンバー変数も付け加えなければなりません。




第1話へ 第3話へ

戻る

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

L>