C++でのオブジェクト指向プログラムとは、
クラス、継承、仮想関数(ポリモーフィズを成立させるための仕組み)を有効に使ったプログラム。
オブジェクト指向言語では、intやstreamといった型を使って変数というものを作るのと同じようにして、
「もの」を自由に定義できる。例えば「猫」はデータと動作を次のように定義して、作ることが出来る。
猫
データ:名前
動作:鳴く
これは「猫そのもの」ではなく「猫の設計図」、C++では自分が定義したい「もの」の設計図(オブジェクトの型)をクラスと呼んで次のようにコーディングします。
class Neko //「猫(の設計図を)」定義するぞ、という宣言
{
private:
string name; //「たま」「みけ」といった個別の名前の置場の定義
public:
Neko(string s) { //「猫を作る関数」:コンストラクタの定義
name = s;
}
void naku() { //「鳴く動作を定義する関数」
cout << "にゃあ。私は" << name << "です。" << endl;
}
};
<最後の}の後の;を忘れずに>
コンストラクタは「個別のオブジェクト(またはインスタンスと呼ぶ)を作る」
コンストラクタは必ず名前がクラスの名前と同じ
クラスの定義の後で、
Neko dora("たま");
と記述して、「たま」という名前を持ったdoraというNekoオブジェクトを作り、
それを使って「個別の猫」を動かすコードを書く。これが個別のプログラムの目的。
int main()
{
Neko dora("たま"); //Nekoがクラス名、doraが変数、"たま"がコンストラクタに渡される引数。これ以降doraがNekoオブジェクトを表す。
dora.naku(); //Nekoであるdoraに、関数nakuを実行させている。
}
実行結果は
C:\cpp>0102.exe
にゃあ。私はたまです。
C:\cpp>
なぜわざわざクラスNekoを書いたのか、
一度Nekoを定義すれば
Neko dora1(“タマ”);
Neko dora2(“トラ”);
Neko dora3(“ミケ”);
と同様の猫をいくらでも作れる。