C++編【導入】 第0章 はじめに

このエントリーをはてなブックマークに追加

この章の概要

この章の概要です。

イントロダクション

C++ は難しい言語です。 その一方で、非常に強力な言語です。 この言語さえ知っていれば、何でもできると言えるだけの強力さを持っています。
何でもできるというのはC言語でも同様ですが、C++ はその強力で豊富な機能のおかげで、 高い保守性を誇っており、特に中〜大規模な開発において、高い開発効率を誇ります。 その上で、C言語並の処理効率の高さを持っているのです。

これは特に、ゲームプログラミングの勉強をしようとして、C++ という言語に行き着いた人に多い勘違いのようですが、 C++ が「何でもできる」言語だといっても、グラフィックスを表示したり、音を鳴らしたりといった機能をもっている訳ではありません。 こういった機能は、Windows等が持っているものであり、これを呼び出すために C++ が使えるということです。
ですから、ゲームプログラミングができるようになるためには、「C++ のようなプログラミング言語」「Windows 等のターゲット環境の機能の使い方」 「ゲームのアルゴリズム」のそれぞれを個別に学習しなければなりません。


少し脱線したので、話を戻します。
C++ は、C言語とほぼ同じ考え方の手続き型プログラミングに加えて、 オブジェクト指向プログラミング汎用プログラミングといった、新たな考え方を使うことができます。 このように複数の手法が使えるというのは、自由度が高く、表現力豊かであるということです。

C++ は、C言語との互換性も考慮されており、ほとんどの場合、C言語のソースコードをそのまま C++ として扱うことができます。 ですから、C言語が分かっていれば、C++ の世界へ足を踏み入れるのは割と簡単です。 問題は、そこから先があまりにも広大であることですが、全てを理解しなくても C++ を使うことはできます。
C++ には、「使用していない機能が余計なオーバーヘッドを発生させない」という哲学があります。 これは処理効率についてもそうですし、プログラマの学習コストの面でも同様です。 知らない機能のことは忘れておいても良いのです。

準備

C++ の学習を始めるに当たり、コンパイラを準備する必要があります。 当サイトが対応しているコンパイラは、C言語編と同じで、以下のものです。

  1. Microsoft VisualStudio Community 2017
  2. Microsoft VisualStudio Community 2015
  3. Microsoft VisualStudio Express 2013 for Windows Desktop
  4. clang 3.7

なお、当サイトでは、VisualStudioシリーズを指して「VisualC++ XXXX」(XXXX は西暦年)という名称で統一しています。

また、これら以外の手段として、オンラインコンパイラを使う方法もあります。 これは、Webブラウザを通して、サービス提供者のサーバにあるコンパイラを使う方法で、 手元の PC に開発環境を構築しなくても、(ある程度の)プログラミングを行うことができます。 ただし、多少、出来ないことがあるかも知れませんから、その点はご了承下さい。
開発ツールの情報」のページに、 paiza.IO という Webサイトの情報を載せていますので、そちらを参照してみて下さい。
paiza.IO を使う場合、実際に動作しているコンパイラは clang 3.8 です(2017年6月5日現在)。


C++ には、標準規格が存在します。 2017年3月現在、C++98、C++03、C++11、C++14 という4つの規格(数値はそれぞれ正暦年の下2桁の意味)があります。 C++03 は C++98 に対するマイナーバージョンアップ、C++14 は C++11 に対するマイナーバージョンアップという位置付けなので、 大きな変化が起きたのは C++11 のタイミングになります。
当サイトでは、C++03 を踏まえた解説をベースとしつつ、関連する C++11/14 での変更点を適宜取り上げていきます (C++11/14 の話題は分離したところに書くようにしています)。 ただし、規格にこだわるよりも、上記のコンパイラで動作することを重視しています。

VisualC++ 2013/2015/2017 は、C++03 までの機能を使うことができ、C++11/14 の機能の多くが使えます。
clang 3.7 は、C++14 までの機能に対応しています。

C++11/14 に固有な解説は、できるだけ分離したところに書くようにしています。 そこまで学習するのが大変だと感じるようなら、単にその箇所を無視して読み進めて下さい。


VisualC++ は、C++ の仕様上はまったく問題のないはずのソースコードに対して、警告やエラーを出すことがあります。 これはセキュリティ上、危険な場合への対策を促すものですが、学習には少々邪魔になるかも知れません(もちろん、本格的なプログラムでは、危険性があるということは認識すべきです)。 この辺りの詳細は、開発ツールの情報を参照して下さい。

方向性

当サイトの C++編では、C言語習得者で C++ は初めてという段階の人に向けて解説を行います。 当サイトとしては、C++ の学習より先にC言語を学習すべきであるという立場を取ります。
ですから、C言語の学習がまだであれば、先にC言語編をお読みください。

冒頭でも書きましたが、C++ は難しい言語です。 広く使われているプログラミング言語の中でも、トップクラスの難しさかも知れません。 ですから、当サイトの記事を読んだからと言って、すぐにでも C++ を使いこなせる訳ではありません。
とにかく多くのプログラムを読み、多くのプログラムを自分の手で書いて下さい。

解説されている範囲の内容に関して、どうしても理解できない場合は、 質問メールを送って下されば、可能な範囲でお答えします。 匿名で構いませんので、ky_webid@yahoo.co.jp までどうぞ。

本編の内容について

C++編は、幾つかの分類ごとに、章立てを行っています。 ですから、言語解説編の第1章と、標準ライブラリ編の第1章とは別の章になっています。
1つの分類の中の章は、できるだけ、突然内容が飛躍するようなことが無いように考慮しているつもりですが、 明らかにそうなっていない箇所があれば、是非ご指摘下さい。

初めての方は、「言語解説編」の方から読み進めて下さい。 そこから適宜、「【標準ライブラリ】の○○章へ進んでください」といった指示があるので、 そのような場合に、「標準ライブラリ編」をお読み下さい。
また、「標準ライブラリ編」は、標準ライブラリの1つの機能ごとに章を分離するように構成していますから、 リファレンスのようにも使えるでしょう。


やや高度な内容や、細かい部分は、次のように破線で囲んでコラム的な扱いとしています。 この部分の説明については、難しければ読み飛ばしても構いません。

この部分に書かれている内容は、少し高度なものです。

本編で登場するサンプルプログラムや、その断片は、使えそうであれば、ご自分のプログラミング作業の中でそのまま使って頂いても構いません。 ただし、バグが無いことや、最良のプログラムであることを保証している訳ではありませんので、自己責任でお願いします。


参考リンク

更新履歴

'2017/6/5 paiza.IO の紹介を追加。

'2017/3/25 VisualC++ 2017 に対応。

'2016/10/15 clang の対応バージョンを 3.7、Xcode を 7.3 に更新。

'2015/12/27 標準規格に関する文章を、現状に合わせて修正。

'2015/10/12 clang の対応バージョンを 3.4 に更新。

'2015/9/23 標準規格に関する文章を、現状に合わせて修正。

'2015/9/5 VisualC++ 2012 の対応終了。

'2015/8/18 VisualC++2010 の対応終了。

'2015/8/15 VisualC++ 2015 に対応。

'2014/10/18 clang 3.2 に対応。

'2014/2/8 コンパイラに関する情報を、「開発ツールの情報」のページへ分離。

'2014/2/1 VisualC++ 2013 に対応。

'2014/1/14 VisualC++2008 の対応終了。

'2014/1/13 clang 3.0 に対応。
VisualC++2012、2008 のリンク先を修正。

'2013/2/10 新規作成。



次の章へ

C++編のトップページへ

Programming Place Plus のトップページへ