C++言語講座 初級編 第1回
いよいよ、初級編の始まりです。これから出てくるソースコードは全て、実際に入力し、コンパイル・実行して下さい。上達への近道です。
C++の基本
簡単なプログラム
とりあえず、能書きはおいといて、プログラミング言語(とくにC/C++)を習い始めるときに、まず間違いなく、最初に教えるプログラム「Hello world!」を見てみましょう。以下の[List1]をエディタで打ち込んで、コンパイル、実行しましょう!
[List1]
1 #include <iostream>
2
3 int main()
4 {
5 std::cout << "Hello C++ world!" << std::endl;
6
7 return 0;
8 }
画面には
Hello C++ world!
と表示されましたね?どうやら、プログラム中盤の " で囲まれた部分を画面に表示するプログラムのようです。では、このプログラムがどんな構造になっているか、上から順に見ていきましょう!
1 #include <iostream>
さて、ここの部分ですが…、ちょっと今は無視。(おい!)
大丈夫大丈夫、後でちゃんと説明しますから…。ただ、プログラムの本筋とは関係ないわけですよ。普通、C++でプログラムを書くときには、最初にこの一行を書く場合が多いです。この機会に覚えちゃいましょう。
1 int main()
2 {
プログラムの本筋はここからです。
ここでは、「main」という名前の関数(function)を作っています。関数というのは、幾つかの処理が集まった物で、C++のプログラムの最小単位です。このmain関数というのは、いわばプログラムの本体で、「C++で作られたプログラムを実行する」という事は「そのプログラムのmain関数を実行する」という事なのです。つまり、このmain関数の中身こそが、プログラムなのです。
関数の概念
次の行の { から } までが、main関数の中身です。
では、その前に書かれたintとは何でしょう?
このプログラムを実行すると、Windowsはこのプログラムのmain関数を実行します。main関数の中に書かれた処理が終ると、このプログラムも終了するわけですが、この時に処理をした結果をWindowsに教えてあげることになっています。このために使われるのが返値(へんち:return value)と呼ばれるものです。「返値」とは、関数が処理をした結果(処理が成功したか失敗したか、等)を表すデータのことです。main関数は処理をし終わると、Windowsにこの「返値を返す」のです。
main関数の場合、プログラムの処理が正常に終了したら 0 、失敗したら 1 という整数の返値を返すことになっています。main関数を書くときにはちゃんと「main関数の返値は整数ですよ」とコンパイラに教えてあげなければなりません。実はこの「int」というのは英語のintegerの略で「整数」という意味なのです。このように、関数を作るときには、関数の名前の直前に関数の返値の種類を書かなければならないわけです。
ここで使っている「int」のように、返値などのデータの種類を表す物を、 型(type)と呼びます。つまり、「main関数の返値は『int型』だ」等と言うわけです。型にはint型(インテジャ型、と読みます)以外にも多くの種類が有りますが、説明はまた後の方でします。また、関数の返値の型のことを、 関数の型と呼ぶことも有ります。
最後に、関数の名前である「main」に続いて書いてある「()」はどんな意味でしょうか? ここでは深入りしませんが、関数を実行するときに引数 (argument/parameter)と呼ばれるオプションを与えて実行することが出来ます。その「引数」を()の中に書くのですが、main関数には必要無いので書きません。「引数」についてはまた後で説明します。
ともかく、このように、関数の型と関数の名前、そして引数を書いて関数を新たに作ることを、関数の宣言(declaration)と呼びます。また、実際の関数の処理の内容を { } で囲んで書くことを、関数の定義(definition)と呼びます。
1 std::cout << "Hello C++ world!" << endl;
さて、ここからが、main関数の中身。すなわち、このプログラムの処理そのものです。
まず、std::coutというのはパソコンの画面を表すオブジェクト (object)です。さあ、ここで新しいものが登場してしまいました。「オブジェクト」とは一体なんでしょう。objectは辞書でひくと「物」と書いてあります。その通り。「オブジェクト」というのは色々な「物」をプログラムで扱いやすいようにまとめたものだと思って下さい。と言っても、よく意味が分からないと思いますが、実際に使ってみると段々と分かっていくと思います。ともかく、このstd::coutというのは画面を表しているんだ、と言う事をおぼえておいて下さい。
つぎに現れる<<というのは、右側に書いてあるオブジェクトを左側のオブジェクトに流しこんでいる、と考えて下さい。では、この右側は何でしょうか? ここでは、"Hello C++ world!"というように、文章が"(ダブルクォート)で囲まれています。これを文字列(string)と呼び、これ全体で中に書いてある文章を表すオブジェクトとなっています。
続いて登場するstd::endlというのは、改行を表しているオブジェクトです。
すなわち、この行全体では、画面に"Hello C++ world!"という文字列と改行を、流してくれ。とコンピュータに命令しているわけです。
最後に登場する;(セミコロン)は、この行がここで終るという事を意味しています。日本語で言えば「。」(まる)のようなものでしょうか?
オブジェクトの模式図
1 return 0;
main関数内での処理の最後にやってきました。ここでは、上の方で書いた「返値」を返しています。return(=返す)文は
1 return 返値;
と書きます。この文のところで、その関数の処理が終り、返値を返すことを表します。前に書いたように0を返しているということは、正常終了したと言う意味です。通常は0を返せば良いでしょう。return文を書くときには、最後の;を忘れないように。
インクルード
1 #include <iostream>
ここで、1.1.1で説明を後に伸ばした、この行の説明をしましょう。
このプログラムの中では、二のオブジェクトを使いました。std::coutと std::endlです。それぞれ、「画面」「改行」という意味です。しかし、C++のコンパイラというのは、ハッキリ言って頭が悪いです。だって、main関数の宣言をする時にすら、main関数の返値をint型だと説明しなければいけない位なのですから。ですから、C++のコンパイラは、これら二つのオブジェクトの意味すら知りません。先に教えてあげないといけないのです。
ハードディスクの中を探してみると、iostreamというファイルが見付かるはずです。この中には、std::coutだとか、std::endl等のオブジェクトがどんな意味なのか、コンパイラに分かるように書いてあります。ですから、これらのオブジェクトが使いたかったら、先にコンパイラに「iostreamというファイルを先に見てね」と教えてあげないといけないのです。これが、この
1 #include <iostream>
という一文の意味なのです。
このiostreamのように#includeで読みこんで使うためのファイルを ヘッダファイル(header file)と呼びます。
補足
include(=含む)文は、上に書いたような意味を持っていますが、その前の#(シャープ)は一体なんでしょう。このinclude文は、 プリプロセッサ(preprocessor=先に処理されるもの)と呼ばれ、実際のコンパイルが始まる前に実行されます。この#はこれがプリプロセッサであるという印です。
名前空間
さて、これで一通りプログラムを見ましたが、二つのオブジェクトが出てきましたね。std::coutとstd::endlです。これらは上で見たように
1 #include <iostream>
という行で読みこまれる物です。coutは多分character out(=文字出力)の略の気がします。 endlはend lineの略かもしれません。じゃあ、stdって一体なんでしょう? 先ほど、 iostreamというファイルの中には様々なオブジェクトの意味が書いてある、と言いました。このようなファイルをまとめてライブラリ(library)と呼びます。色々な情報が分かる図書館という感じでしょうか。特に、iostreamは C++のコンパイラに最初から付いて来るC++標準ライブラリの一部です。stdというのは標準、つまりstandardの略です。C++標準ライブラリに属する全てのオブジェクトその他には最初にstd::という5文字が付いています。このように、オブジェクト等がどのライブラリに属しているかを表す、この「std」のような言葉を名前空間(namespace)と呼びます。しかし、一々 std::…と書いていたのでは、面倒ですよね。C++ではこの名前空間を省略することが出来ます。std::を省略したかったら、 #include文の後に
1 using namespace std;
と書けば良いのです。最後の;を忘れないように。
では、これを使って、[List 1]のプログラムを書き変えてみましょう。以下のとおりです。
[List 2]
1 #include <iostream>
2 using namespace std;
3
4 int main()
5 {
6 cout << "Hello C++ world!" << endl;
7
8 return 0;
9 }
コメント
さて、プログラムという物は、どうしても人間が一目見て意味が完全に分かると言うものでは有りません。今書いたプログラムを一年後に見たら、多分、何をするプログラムかも分からなくなっているでしょう。ですから、プログラムの合間合間にプログラムの説明を書いておくのが良いとされています。
プログラムの中で//からその行の終りまではコメント(comment)と呼ばれ、何を書いてもコンパイラに完全に無視されます。また、/*と*/の間も「コメント」として扱われます。プログラムに関する説明は、この「コメント」の所に書くことになります。以下に例を示します。
[List 3]
1 // Hello C++ world と表示するプログラム
2 #include <iostream>
3 using namespace std;
4
5 // main関数
6 int main()
7 {
8 cout /* ←画面を表す */ << "Hello C++ world!" << endl;
9
10 return 0; // 返値として0を返す
11 }
