はじめに
プログラミング言語をC言語から学習された方ならご存知でしょう。C言語にはクラスという概念ありません。私は一番C言語を時間をかけて勉強してきたので、C++でクラスが出てきたとき理解するのに苦労しました。
最近WEB系エンジニアの人気が高く、WEB系の言語(PHP、Rubyなど)のほとんどがオブジェクト指向言語なのでクラス概念は必ず学習するでしょう。
ということで、プログラミング勉強中の方に向けてクラスの作り方を記事にしていこうと思います。
今回は学習用なのでソースファイルを複数に分けたりしません。
そもそもオブジェクトって何?
オブジェクトは全ての総称であり、とても曖昧な概念です。
実世界でいえば、人間、動物、食べ物、自然、本、携帯、服、ありとあらゆるものがオブジェクトに含まれます。
オブジェクトについては、深く理解しようとするよりも、なんとなく「全ての総称なんだな」と認識してください。
オブジェクトを分類して物としてプログラムを扱うことをオブジェクト指向だと私は思ってますね。
オブジェクトとインスタンスの関係
オブジェクトが全ての総称であるならば、インスタンスもオブジェクトの1つということになります。
本やネット上で、オブジェクトとインスタンスが同じ意味のように使用されるのはこのためです。
ネットの学習サイトでインスタンス生成とオブジェクト生成と意味は同じですが、初学者には混乱しますよね。
厳密には
クラスから生成されたオブジェクトのことをインスタンスと呼びます。
本題のクラスって何?
関数や変数をまとめることができる。
要するにクラスとはデータ構造を作る仕組みで、クラスを使うと新しいデータ型を作ることができます。
ネットや教材でよくクラスは、オブジェクトを作る設計書と説明されます。
そのクラスをもとにインスタンスを生成します。
オブジェクトとクラスとインスタンスの関係
実際こんなクラスとインスタンスを作るのかと言うことは一旦置いておいて、ざっくりこんなイメージです。
飲み物クラス(設計図)を用意してクラスを元にインスタンスを生成します。下図ではイメージしやすく飲み物クラスからコーラというインスタンスを生成しています。
実際クラスを使ってインスタンスを生成してみる
#include <iostream>
/* ------------------------------クラス定義------------------------------------ */
class Drink
{
public: //外部から自由にアクセス可能
//コンストラクタ
Drink();
//デストラクタ
~Drink();
};
/* -----------------------------メソッド処理------------------------------------ */
//コンストラクタ
Drink::Drink()
{
std::cout << "オブジェクト生成" << std::endl;
}
//デストラクタ
Drink::~Drink()
{
std::cout << "オブジェクト破棄" << std::endl;
}
/* ------------------------------main関数------------------------------------ */
int main()
{
Drink Cola; //インスタンス生成 Drink型のオブジェクトColaを生成 コントラクタ
return 0; // インスタンス消去 デストラクタ
}
記事のはじめにも記載しましたがヘッダーファイル等ファイルを分割していません。見辛かったらすみません。
ソースですがまずクラス定義の箇所Drinkクラスを作成してます。publicというのは以下の変数、関数はどこからでも呼び出すことが可能という意味です。
コンストラクタとデストラクタですが、オブジェクト生成時に実行されるのがコンストラクタであり、オブジェクトが破棄された時に実行されるのがデストラクタです。
実際はクラスに記載しなくてコンストラクタとデストラクタは実行されるのですが、今回は実行されたかどうか確認するために記載しております。(コマンドコンソールに出力したいから)
メソッド処理にはコンストラクタとデストラクタが実行された時にコンソールに出力する処理が記載されています。
main関数ではオブジェクトを生成し、処理が終了しています。
基本的に関数内でオブジェクトを生成するば、その関数の終了と同時にオブジェクトが破棄されます。
ちなみに上記以外にも、new でオブジェクトを動的に生成する方法がありますが今回省きます。
上記のソースを実行すると、、、
オブジェクト生成
オブジェクト破棄
が出力されたと思います。
まだ処理自体は何も行なっていませんが流れとしてはこんな感じです。
以上