プログラミングが初めての人でもわかるC++の講座です。ここではC++の特徴である、オブジェクト指向について解説します。
※この記事は、「C++入門講座」の続きです。プログラミング未経験の方はそちらの記事からご覧ください。
プログラミングは、何となくでもある程度は使えます。実際にプログラマーを自称している人でも、基本を知らない人はたくさんいるでしょう。しかし一番怖いのは、基本をおろそかにして、慣れてきたころにみんなが当たり前に知ってるけど意外と知らない情報が出てくることです。
そこで、ここではYoutubeのタイトル通り丁寧に解説を進めていきます。はじめはちょっと退屈かもしれませんが、じっくりゆっくり学んでいきましょう。それぞれの動画の文章化も本サイトでぼちぼち進めていきますので、気長にお待ちいただければと思います。
1.オブジェクト指向について知ろう!
今回の動画シリーズのテーマはずばりオブジェクト指向です。ここではオブジェクト指向の概念を紹介します。
実際にコードを書いていないからと侮るなかれ、ここが一番大事です。ぜひ腰を据えてじっくり見てみてください。
私としては、どの参考書・動画・サイトよりも一番わかりやすく説明したつもりです。特に、細かい用語よりも、全体像を意識してみてください。ゲームのキャラクターを例にすることで、「何をやっているか」「何が便利なのか」をつかめると、理解が一気に深まります。
オブジェクト指向を使うと、ゲームのキャラクターのようなちょっとだけ違う機能を持ったプログラムを大量に作成したり、企業のように大人数の組織で協力してプログラムを作るときに非常に便利です。
全体像をつかんだところで、次の動画から早速プログラムを作成していきましょう!
2.構造体・クラス
構造体を使えば、関係のある変数をひとまとめにできます。例えば、ゲームで言うと、HPやMPは構造体でひとまとめにすると便利です。ただ、構造体は普通プログラミングでは使いません。それは、もっと便利な「クラス」があるから・・・
クラスは、構造体と関数をひとまとめにしたものです。構造体の代わりにクラスを使えば良いので、基本的に構造体の出番はありません。クラスは色々便利な機能があり、逆に言えば守るべきルールもたくさんあります。ただ、一つ一つのルールにはちゃんと意味があるので、ゆっくりと丁寧に一つずつ理解していきましょう。
クラスの定義、オブジェクトの生成、セッター・ゲッターがなぜ必要か、なぜ便利なのかわかるようになれば、ここの部分は完璧です。
3.メソッド・継承
メソッドとは、クラス内の関数のことです。前の動画で説明したセッターやゲッターもメソッドなので、あまり難しくはないでしょう。
ここで重要なのが、継承です。継承とは、一度作ったクラスをコピーしてちょっと変える機能です。例えばゲームで言うと、ポケモンのクラスを作って、それをコピーして色違いポケモンのクラスを作ると、共通する部分が多いので、作る手間が省けます。
オブジェクト指向と継承は密接に関わっています。もし、ここで躓いたら、第一回の動画に前に進むヒントがあるかもしれません。
4.コンストラクタ・デストラクタ
コンストラクタはクラスが作られる時に自動的に関数を呼び出してくれる機能です。逆に、デストラクタはクラスが消される時に自動的に関数を呼び出してくれる機能です。要点だけ理解してしまうと、あまり難しくはないでしょう。
これが何に役立つかというと、例えばメモリの確保です。C++では、他の言語と違ってメモリを自分で管理することが想定されています。つまり、コンストラクタでメモリを確保して、デストラクタでメモリを開放することができます。
ただ、今の所すぐにコンストラクタ・デストラクタを使う機会はないので、概念だけ覚えておくと良いでしょう。継承についても説明していますが、もし躓いても、そのまま進めてしまって構いません。必要なときにまた戻ってきて、確認しましょう。
5.オーバーライド・仮想関数
オーバーライドとは、継承後のクラス(派生クラス)で同じ名前で関数を上書きする機能のことです。こんなことできるんだなー、程度に知っておきましょう。
仮想関数を使うと、関数呼び出し時の動作が若干変わります。ここでは、仮想関数だけを紹介しているので、何のために使うのかさっぱりだと思います。ただ、次の「抽象化」では仮想関数を使うことで非常に便利になるので、ここは耐えてついてきてください。
実用性がわかりにくくてちょっとつらいかもしれませんが、ここは少しの辛抱です。難しければ、「こんな機能があるんだ」「virtualは仮想関数なのか」くらいの理解で次の動画に進んでも大丈夫です。
6.抽象化
おまたせしました、これがオブジェクト指向の最終回、抽象化です。ここまでよく頑張りました。
抽象化を使うことで、コピー元となるクラスのオブジェクト生成が禁止出来ます。この機能は、ミスを防ぐのに非常に便利です。
例えば、ゲームキャラクターをたくさん作る必要があるとしましょう。オブジェクト指向を使えば、コピーを使用して大量にキャラクターを作れます。しかし、同じ名前・見た目のキャラクターは作りたくない。今までの方法だと、間違えて継承先の派生クラスで設定し忘れたら、名前・見た目の変数(や関数)のないクラスを作りかねません。もしくは、基底クラスと同じ名前・見た目のオブジェクトが出来てしまうかもしれません。
しかし、抽象クラスを使えば、派生クラスで名前・見た目の宣言をしていないときにエラーを出してくれるので、ミスを防ぐことが出来ます。
このように、基底クラスをコピー元として扱うことで、大量のオブジェクト生成で便利です。どうですか?オブジェクト指向の特徴がわかってもらえましたか?
このあたりはテクニックになってくるので、必須で使う必要はありません。ただ、プログラムをスマートにかけるようになると、オブジェクト指向の恩恵は大きくなります。ぜひ、概要だけでも覚えて、いざというときに使えるようにしておきましょう。
おわりに
今回の「丁寧に学ぶC++初級講座」は、オブジェクト指向に的を絞って解説しました。オブジェクト指向は難しいと言われがちですが、概念をしっかり理解したあとに進めると便利さがわかると思います。
今回まででC++の重要な要素については説明しました。ここまでくれば、プログラムを書くのに十分な知識は手に入れているはずです。