C++からしばらく離れていたプログラマですが、これからの業務で触れる可能性が出てきたので、一度初心に立ち返って基礎からおさらいをしていく過程を備忘録として残していきます。
【C++基礎】C++プログラマが学びなおす その1
1. そもそもC++とはどのような言語?
プログラムを学ぶにあたって、まずはC++とはどのような言語なのかというところをまとめていきます。
C++の特徴をいくつか挙げてみます。
・C言語に対して上位互換性がある言語である
・プログラムの実行速度が他の言語に比べて速い
・オブジェクト指向のプログラミング言語である
2. C言語に対して上位互換性がある言語である
C++はC言語を拡張したプログラミング言語です。
そのためC言語と互換性があり、C言語で書かれたプログラムは基本的にC++で利用可能となっています。
C言語での開発で可能なOS、メモリ、ハードウェア等のリソースにアクセスしたり、高級言語のようにアプリケーションの開発を行う、といったこともC++で実現することができます。
それに加えて、C言語から機能拡張が実装されています。オブジェクト指向、多重継承、テンプレート、関数・演算子のオーバーロード、例外処理のような機能が追加されています。
オブジェクト指向については後ほどピックアップして紹介します。
2-1. 多重継承
多重継承とは、複数のクラスから継承を行うことを指します。
多重継承を行うと、複数ある基底クラスそれぞれのメンバが派生クラスへと引き継がれます。
多重継承の際の基底クラスが同じ1つのクラスから継承されて作られた派生クラスである場合など、開発を行うにあたって注意が必要な点はありますが、うまく使うことで効率的な開発を行うことができます。
2-2. テンプレート
テンプレートとは、様々な型に対して適応できる変数の型を用意するための仕組みです。
主にライブラリで関数を開発する際に、ユーザーがどのような型を使用するかを想定して開発を行います。
例えば単純な足し算を行う関数をライブラリに追加する際は、数値データを用いることが想定されますので、数値型の変数を受け入れられるように設計を行うと思います。
しかし、開発する関数によっては様々な型を想定して開発しなければならないパターンがあります。
その際、多くある型すべてを想定して複数の関数を作るのは厳しいと思います。
そこで利用されるのがテンプレートです。
これを利用することで、任意の型として関数内で変数を利用することが可能です。
2-3. 関数・演算子のオーバーロード
ポリモーフィズムとは、1つの識別子(インターフェイス)で複数の実装を行うことを指します。
同じ関数名で引数の型や数が異なる関数を作成することが可能です。
プログラムの中でその関数が呼ばれたときに、引数がなければAの処理を、引数が1つであればBの処理を、2つあればCの処理を…というような開発を行うことが可能です。
2-4. 例外処理
例外処理とは、プログラム実行時に発生する異常を検知して問題の検出と解決を行うための処理です。
開発の段階で開発者が想定しうる、発生しそうな問題(ユーザーの操作ミスやハードウェアの故障など)を例外として定義し、例外が発生しうる処理の部分で例外処理の記述を行います。
これを行うことで、より重大な問題を避けることにつながります。
このように、C言語の強みをそのままに、更に開発を効率的に行う機能が追加されている点が特徴の一つです。
3. プログラムの実行速度が他と比べて速い
C++はプログラムの処理速度が非常に速く、他のプログラミングと比べても群を抜いています。
C++の処理速度が速い理由はいくつかあります。C++がコンパイラ言語であること、ソースコード自体が機械語に近いアセンブリ言語の特徴を持っていること、という点が挙げられます。
プログラムとは、ソースコードをコンピューターに読み込ませる必要があります。
ソースコードを書くのはもちろん人間ですので、人間が読んで書きやすいものになっています。
それを機械語に翻訳する必要があり、これをコンパイルと呼びます。
C++はプログラムの実行前にコンパイルを行います。これを「コンパイラ言語」と呼びます。
プログラムの実稼働時にコンパイルを行う「スクリプト言語」と呼ばれるPHPやRubyと比べて処理が速くなります。
また、アセンブリ言語の特徴を持つことで、開発時にデータ型を選ぶことが可能です。
無駄のないプログラミングを適切に見極めながら開発を行うことで、余計な記述や処理を行うことを避けることができ、結果的に処理速度の向上につながるところも速い理由のひとつです。
C言語も同様の特徴を持ち、実行速度が速いです。
C言語から派生したプログラミング言語は全般的に処理速度が速いといえます。
4. オブジェクト指向のプログラミング言語である
C++はオブジェクト指向のプログラミング言語です。
オブジェクト指向のプログラミングは現在の開発手法の主流となっており、概念の理解こそ難易度が高めではありますが、適切な設計・開発をおこなうことで効率的かつ無駄のない開発を行うことができます。
5. C++でできること
C++は高速で複雑な処理を行うことができ、自由度の高いプログラミング言語です。
そのため、様々なシステムを開発することができます。
例えばロボット開発です。
ロボットに対する複雑な命令のプログラミングを行うことがC++では実現できます。
また、AIやディープラーニングといった人工知能の分野でも利用されています。
IoTシステムにおいてもC++は利用されています。
IoTとはモノに対してインターネット接続の機能を持たせて自動で様々なことを行わせるような仕組みのことです。
例えば、自動で部屋の照明の点灯、消灯を行ったり家の鍵の開閉を自動で行う「スマートハウス」と呼ばれるシステムが代表的です。
その他には組み込み系のシステムでも利用されています。組み込み系システムとは、家電や自動車などに組み込まれているシステムのことです。
これらは大きなコンピューターを持っているわけではなく、また速いレスポンスが必要とされますが、C++ではこの厳しい要件に応えられる性能を引き出すことが可能です。
大規模なシステムの開発にも向いているとも言えます。
先ほど紹介したようにC++はオブジェクト指向のプログラミング言語ですので、大規模なチームにおける開発に向いています。
また処理速度の速さから、大規模システムに必要な大容量のデータの処理にも向いています。
システムとは少し外れますが、ゲーム開発の分野でもC++が使われる場面があります。
特に家庭用ゲームハード向けのゲームソフトの開発に利用されます。
ゲームのジャンルによっては処理速度の速さが重要視されることもあるため、処理速度の速いC++はゲーム開発にも向いているといわれています。
実際にC++が利用されている有名なシステムをいくつか紹介します。
Google社が提供するWebブラウザの「Google Chrome」、Epic Games社が提供するゲームエンジンである「Unreal-Engine」などは何処かで目にしたり、利用したことがある方もいるかもしれません。
6. まとめ
今回はC++とは一体どんなものであるのかをまとめてみました。
特徴を理解してプログラミングを行うことで、C++の持っている力を最大限引き出せるようにできれば技術者としてステップアップ出来ると思います。