たかぎさんの言う通りまずはそこから…と私も思います。
しかし、甘いと思われるかもしれませんが、自分の知識の確認のためにも答えさせて頂こうかと思います。
コンストラクタとデストラクタについてまずお話したいと思います。
クラスと言うのは構造体とは違い、変数だけでなく関数も一緒のグループとして取り扱えるものです。
その中でコンストラクタは作ったクラスを利用する際に必ず1番最初に呼ばれる関数の事を言います。
逆にデストラクタは「デス」と付くように利用するクラスが最後に呼び出す関数の事を言います。
使用しているクラスがスコープ(有効範囲)を抜ける際に呼び出されます。
どちらも戻り値を指定する事が出来ませんので関数の型を定義する必要が有りません。
コンストラクタとデストラクタは定義していなくても、自動的に「何もしない」コンストラクタとデストラクタが作られます。
ここで何かしらの処理をしたい場合はクラスを作るときに自分で定義してやる必要が有ります。
定義する場合はコンストラクタなら
クラス名(){処理}
デストラクタなら
~クラス名(){処理}
と記述します。
記載されているプログラムよりもシンプルな物を用意したのでそれを見てみましょう。
#include<iostream>
//以降名前空間「std」を省略
using namespace std;
class TestClass{
public:
//コンストラクタを定義
TestClass(){
cout << "コンストラクタ実行" << endl;
}
//デストラクタを定義
~TestClass(){
cout << "デストラクタを実行" << endl;
}
};
int main(void){
TestClass A; //ココでコンストラクタが呼ばれる。
return 0;
}//ここでデストラクタが呼ばれる。
//実行結果
コンストラクタ実行
デストラクタを実行
このように自身は何かをしたつもりがないのに、勝手に呼ばれるのがコンストラクタとデストラクタです。
なお自身が設定してもpublicメンバ(公開用)にしておかないと、コンパイラが
「(自動的に)呼ぼうかと思ったけど公開されてないから無理」
と言うような事を返してきます。
今回のプログラムのコンストラクタを解説すると
Cat::Cat(char *kind, char *size){
leg=4; //「leg」に4を代入
strcpy(kind_of_cat,kind); //「kind_of_cat」にkind(指定された猫の名前(文字列))をコピー
strcpy(body_size,size); //「body_size」にsize(指定されたサイズ(文字列))をコピー
//画面にコンストラクタが呼ばれた事を出力
cout<<kind_of_cat<<"のコンストラクタが呼ばれました"<<endl;
}
となります。
デストラクタは自身が呼ばれた事を出力しているだけですね。
またメンバ関数show()は指定された情報を出力しているだけです。
今回はそれだけの処理をするクラスのようですね。
今回の場合を除いてコンストラクタとデストラクタを有効に使うプログラムですと…。
例えばnew(動的にメモリを確保)delete(newされた領域の開放)を利用したプログラム等があるでしょう。
deleteのし忘れは良くあるバグで、そのバグを生み出す可能性を回避する事が出来ます。
こちらもサンプルを書いてみました。
#include<iostream>
#include<string.h>
//以降名前空間「std」を省略
using namespace std;
class TestClass{
//利用するときにはアクセスできないメンバ
private:
char *str;
//利用するときにアクセスできるメンバ
public:
//コンストラクタ(指定されたサイズ分配列を確保)
TestClass(int size){
cout << size << "Byteの領域を確保。" << endl;
str = new char[size];
}
//文字列をコピー
void get(char *st){
strcpy(str, st);
}
//画面へ出力
void show(void){
cout << "現在「" << str << "」という文字が入っています。" << endl;
}
//デストラクタ(開放)
~TestClass(){
cout << "確保された領域を開放。" << endl;
delete [/url] str;
}
};
int main(void){
TestClass moji(32); //32個のchar型配列を確保
moji.get("猫が好き"); //「猫が好き」という文字を格納
moji.show(); //画面へ出力
return 0;
}
//実行結果
32Byteの領域を確保。
現在「猫が好き」という文字が入っています。
確保された領域を開放。
長くなってしまいましたがコンストラクタとデストラクタというのは以上のような感じのものになります。