情報学部 菅沼ホーム 本文目次 演習解答例 付録 索引

はじめに

  コンピュータを使用する上で,プログラミングほどおもしろいものはありません.プログラムが書けなかったら,コンピュータのおもしろさは半減する(ほとんどない)といっても過言ではないと思っています.たしかに,ゲームもおもしろいかもしれませんが,いつかは飽きてしまいます.なぜなら,そこに存在する限界がわかってしまうからです.しかし,プログラミングは違います.少なくとも,現状においては,プログラムによってコンピュータの能力をどこまで引き出せるのかを明確に述べることはできません.たとえば,コンピュータがどこまで人間に近づけるかといった問題も,コンピュータアーキテクチャだけではなく,ソフトウェアに依存する部分もかなり多いと思います.

  C/C++,特に C++ は,「理解しづらく,最初に学ぶ言語として適さない」とよく言われています.それでも,C++ によってプログラミング言語の学習を初めてもらいたいと思っています( C が C++ の部分集合的な関係であるため,最初は C の学習から始まることになりますが).C++ は,「メモリの利用効率を高める」,「計算時間を早める」,「記述しやすくする」等の目的のため,たびたび,標準規格の見直しが行われ,機能の向上が図られてきました.特に,2011年度の大きな見直し( C++11 )の後は,3 年ごとに修正( C++14,C++17, C++20, 次は C++23? )が行われています.最初からこれらすべての機能を理解して C++ を学ぼうとすれば挫折に繋がりかねません.私自身も,恐らく,全ての機能を理解していないと思います.しかし,ほとんどの言語の基本的な部分は同じです.その基本さえ学ぶことができればプログラムを書くことは可能です.プログラムにとって最も重要なことは「読みやすく,理解しやすい」ことです.残念ながら,機能向上によってこの点が損なわれることも少なくありません.基本的な機能だけを使用して,「読みやすく,理解しやすい」プログラムを書くことができればそれで十分です.勿論,メモリや計算時間が問題になるような場合は,より深く学んで目的を実現する必要がありますが.

  本コンテンツは,C/C++ の解説書です.私自身の好みにより,C/C++ の全ての機能を網羅しているわけではなく,記述が偏っている部分も多くあるかと思いますのでご了承下さい.なお,(C++)(C++11)(C++14)(C++17) 等は,C にはない C++ 固有の仕様であることを意味しています.数字は,その機能が追加・修正された年を表しています.

  プログラミング言語の初心者でも容易に理解できるように書いたつもりですが,その意図は十分満足されていないかもしれません.C/C++ は非常に多くの機能を持った言語です.最初からこれらの機能についての完全な説明を行っていくと,初心者は混乱を起こし,プログラミングの困難さを実感するだけで終わってしまう可能性があります.そこで,最初から多くの概念が入ってくるのを避けるため,特に最初の部分において,対象とする事柄に対する完全な表現をあえて避けています.従って,同じ事柄に関し複数の箇所で説明したり,逆に,複数の箇所を読まないとある事柄に対する完全な説明が得られないような場合が多く出てくるかと思います.また,場合によっては,先に述べた内容と矛盾するようなことを後に述べるようなこともあるかもしれません.これらは,初心者に,細かなことは後回しにして,できるだけ早くプログラムを書けるようになり,プログラミングのおもしろさを知ってもらいたいための配慮です.特に,初心者で,さしあたって C++ に興味が無く,かつ,プログラミング言語 C の概略を理解し,手っ取り早く簡単なプログラムが書けるようになることを目的とする人は,「(C++)」などの表示がある章・節・演習問題を読み飛ばすと良いと思います.

  プログラミング言語を学習すること,つまり,プログラミング言語を理解し,プログラムを書けるようになり,最終的には,プログラミング言語で考えることができるようになることは,数学や他の学問の学習とは多少趣が異なります.もちろん,数学においても,問題を解けるようになるためには,理論を理解するだけではなく,数多くの問題を自分で解く必要があります.プログラミング言語の学習においては,その傾向がさらに強くなります.自転車に乗ったり,スポーツに熟練するような技能の獲得に似ていると言っても過言ではありません.できるだけ多くのプログラムを,実際にコンピュータに向かい,自分で書くことが,目的を達成する唯一の方法です.

  その第一歩は,他の人の書いたプログラムを「まねる」ことです.そのため,できるだけ多くの例題をのせてあります.また,自分で書く能力を高めるため,多くの演習問題が与えられています.解答例も与えてありますが,できる限りそれを見る前に,自分で考え,解いてみて下さい.さらに,本文中には,理解したことを確認するため,簡単な演習問題が与えてあります(結果は,コンピュータが自動的に判断します).

  言語処理系としては,Windows 用の gcc を利用しています.バージョンによって問題が起こることがあるかもしれませんが,あまり特殊な機能は使用していませんので大きな問題にはならないと思います.

  本書は,4部構成になっています.第Ⅰ部は,コンピュータやコンピュータ言語に関する簡単な説明です.第Ⅱ部は,主として C 言語に対する説明ですが,一部,C++ に関する説明を含んでいます.第Ⅲ部は,C++ における最も重要な概念であるクラスに関する説明です.また,第Ⅳ部は,Network プログラミングについての説明です.

情報学部 菅沼ホーム 本文目次 演習解答例 付録 索引