このドキュメントについて
なぜこのドキュメントを書くのか
かねてより僕は、自分が、C/C++で学んできたことをまとめる意味で
C++サンプル集をドキュメント化したいと思っていました。
そういうドキュメントを持っておくと、何かアイディアに詰まったとき、あるいは、あるアルゴリズムを忘れてしまったときなど、自分のためにもあると便利です。
そうした際、
どのようなサンプル有用かという問題が出てきます。
プリミティブな内容が含まれ、言語の本質に触れることができるサンプルとはどんなサンプルか。難しい問題です。
ところで、C言語の教科書ともいうべき名著に
プログラミング言語C(共立出版)という本があります。
K&Rという愛称で知られるこの本は、素晴らしい本なのですが、C言語が、C++とまじりあい、C/C++という表現が一般化してきた現在(2019年)、その内容が若干古くなりつつあります。
しかしながら、
K&Rで紹介されているプログラムの数々は、現在も現役であり、特にアルゴリズムの学習には最適です。であれば、
K&Rに記述されている内容を
C++で記述するのはどうか、と思いつきました。
ただ
K&RはC言語の教科書ですから、C++的な部分(オブジェクト指向、例外処理、テンプレート)などは含まれません。
ここいらは別途、何かのC++向きなサンプルを実装する必要があると思います。
ということで、このドキュメントは大きく3部に分かれます。
第1部は、
K&Rに述べられているサンプルの一部を
C++で書き直したものです。
K&Rをよく読むと、この本は
標準ライブラリをどう作るかという内容であることがわかります。著者である
カーニハン&リッチー両氏が、実際にC言語のコンパイラ作成に深くかかわっていたこともその理由と思われます。
それを
C++で記述するにあたって、低い部分もそうですが、
STLを使ってどう簡略化するか、なども行っています。
ただ、このドキュメントには、元になる
K&Rのソースは含まれません。ぜひ
K&Rを購入して、比べてみていただくと良いと思います。
第2部は、C++のサンプル集の予定です。基本はC++のオブジェクト指向をうまく表現できるように、
stringやlistやmap、あるいはarray(STLではvector)のミニマム版を自作してみたいと思います。
これらは
STLにコンテナとして実装されているものですが、あえて、自作することで、中に詰まっているアルゴリズムを再認識することができます。
また、汎用なアルゴリズム(ソートや2分岐、検索など)や、メモリプール作成、なども、すぐに手が届くところにあると便利ですね。
あと
デザインパターン(GoF)は有名ですが、その中でもよく使うもの、あるいは
GoFに入ってなくても、1つのパターンとして使えるものがあると便利です。
そんな感じで、書き進めたいと思います。
第3部は、第1部、第2部がコンソールアプリのサンプルなのに対して、GUI環境でのサンプルを紹介したいと考えてます。
今のところ
ネイティブなWindowsアプリとして実装したいと考えています。
サンプル集は、GitHubに公開しますが、まだまだ道半ばです。お読みの方がいらっしゃいましたら、長い目で見てやってください。
山ノ井靖(有限会社山ノ井商事)
E-mail: yasyamanoi@gmail.com
準備
皆さんが、現在使っているパソコンの中には
VisualStudio2019がセットアップされていると仮定します。もしセットアップがまだの場合は、
VisualStudioCommunityサイトから、ダウンロードしてください。
そして
新規プロジェクトで
VC++コンソールアプリのソリューションを作成してください。64ビット環境を想定しています。ですから
size_tが64ビットになります。
このドキュメントのサンプルは、すべて
VisualStudio2019で作成されています。
ですが、ほとんどのサンプルは
1ファイルで完結するものです。そういったものは、ドキュメントに記述されているソースコードに
CPPファイルに記述
#include <iostream>
int main()
{
std::cout << "Hello World!\n";
}
と書いてありますので、そのままコピペで実装できます。
しかし、複数のソースファイルにまたがる場合は
Sample0001
function.h
function.cpp
#include <iostream>
#include "function.h"
void func(){
//コード内容
}
main.cpp
#include <iostream>
#include "function.h"
int main()
{
//コード内容
func();
}
のように記述します。この場合は
projects/Sample0001にサンプルのソリューションがあり、
function.hなどの複数のファイルがそのプロジェクトに含まれることを意味します。
ファイル-新規ファイルで追加できますが、サンプルをそのまま開くことも出きます。
もし
VisualStudio2019以降を新たにセットアップされている場合は(将来の話ですが)、ソリューション読み込みの際に、プロジェクトのバージョンを、
最新のものに変更するかを聞いてくると思いますので、そこは
はい(yes)で変更していただいて大丈夫と思われます。
参考文献
プログラミング言語C第2版(K&R)、カーニハン&リッチー著、共立出版
プログラミング言語C++第4版(C++D4)、ビャーネ・ストラウストラップ著、SBクリエイティブ
※
C++D4という書籍の略称は本ドキュメントのみで使用されています。