C++/文法の基礎

ソースコードの記述から実行までの仕方は、箇条書きにすると、
です。
sampleの部分はいわゆる半角英数字ならお好きな別の名前でいいですが、拡張子の .cpp は、コンパイラーがC++のソースコードだとわからなくなるので変えないでおきましょう。
まず、「ようこそ、C++言語へ。」とメッセージ表示をするプログラムを作成してみましょう。
まず、このコードを「メモ帳」アプリなどのテキストエディターに書いて、「sample.cpp」のように拡張子cppをつけて、保存します。
また、「Word」などのワードプロセッサー・アプリケーションで保存しないでください。ワードプロセッサーの保存形式は、プレーンテキストではないのでコンパイルするとエラーになります。
テキストエディタに保存するだけでは実行できません。
まず、コンパイルをして実行ファイルに変更する必要があります。『コマンドプロンプト』などと言われるコマンドライン端末を使います。Windowsの場合、『アクセサリ』にある「コマンドプロンプト」はそれです。
さて、コマンドラインだけでなく、コンパイラも必要なので、インストール済みである必要があります。 『C++/はじめに』にコンパイラのインストール方法などを書いておいたので、必要なら、お読みください。
コンパイル方法の結果だけ、まとめると、
コンパイラの種類によって、コマンドなどが違います。
詳しくは『C++/はじめに』をお読みください。
上記コマンドでは、出力ファイル名を指定していないので、コンパイルしたら「a.out」というファイルが作成されます。
もし出力ファイルに名前を「sample」にしたいのならば
とします。
コンパイル時に出力ファイル名を作成していない場合、gccやclangでのコンパイルなら、コマンド
で実行できます。出力ファイル名を指定しない場合、「a.out」という名前になるからです。
もし実行ファイルをコンパイル時に「sample」と命名したなら、そういう名前の実行ファイルが存在しているので、
で実行できます。
では、さきほどの「ようこそ、C++言語へ。」と表示するプログラムを実行してメッセージ表示させた直後に、
ソースコードだけを書き換えてみると、どうなるのでしょうか。
さきほどの「ようこそ、C++言語へ。」と表示するプログラムを実行してメッセージ表示させた直後に、
と入力して、さきほどのソースコードのファイル「sample.cpp」で上書き保存したら、どうなるでしょうか?
「sample.cpp」で保存した直後に、 コマンド端末で
を実行すると、「ようこそ、C++言語へ。」と表示されます。つまり、上書き保存した内容は、まだオブジェクトファイルには、反映されていません。
こうなる理由は、ソースコードを書き換えて保存しても、それだけでは、オブジェクトファイルは、何も書き変わらないからです。
オブジェクトファイルを、内容「ようこそ、12345。」のものに書き換えるには、
をもう一度、実行して、オブジェクトファイルを上書きする必要があります。
このあとに、コマンド端末で
を実行すると、今度は「ようこそ、12345。」と表示されます。

オブジェクトファイルを、内容「ようこそ、12345。」のものに書き換えるには、
をもう一度、実行して、オブジェクトファイルを上書きする必要があります。
このあとに、コマンド端末で
を実行すると、今度は「ようこそ、12345。」と表示されます。
アメリカのプログラミングの入門書では、「hello,world」とメッセージ表示をするプログラムが、最初に紹介されることが多くあります。
この本でも、さきほど習った知識をつかって、「hello,world」とメッセージ表示するプログラムを書いてみましょう。
答えのコードは、例えば、
のようになります。
コードを書き替えたあとにコマンド端末でコマンド
などを実行してコンパイルしなおしましょう。そしてコマンド端末でコマンド
を実行して、「hello,world」を表示しましょう。
標準C言語でコンソール入出力する場合、printf関数やscanf関数を使う。(文字表示ならコンソール出力なのでprintf。キーボード入力ならコンソール入力なのでscanf。)
C++では、下記のようなcout やcin などのストリームを用いて、体系的な新しい方法でコンソール入出力を行うことができる。
coutやcinを使うには、 <iostream> ヘッダーをインクルードする必要がある。
コンソールへの出力は次のように行う。
<<演算子を複数使うことで、複数の項目を出力することもできる。
キーボードからの入力は次のように行う。
不等号っぽいものの向きが変わっている事に注意。演算子 << と >> はまとめて「入出力演算子」と呼ばれる。
またなお cin について、scanf関数とは違い、右辺の変数に「&」が付いていないことに注意。
なお、<<や>>は同じ形の演算子が、ビット計算のシフト演算子としても使われているが、cout や cin では別の意味で定義しています。
C++におけるcout(とストリーム演算子)には、出力の書式を指定できない欠点がありますを実現するための % 演算子の再定義もできません(そもそもプリミティブにメソッドを定義できません)。
Cのprintfでは、出力書式の指定が可能です。
いっぽう、printfを使うと、下記のように出力書式の設定が可能です。
C++ にはstringクラスがあります。いっぽう、標準Cにはstringクラスは有りません。
printfはstringクラスのインスタンスを表示できないので、stringクラスのメソッド.c_str() 使ってprintfで表示できCの文字列型に変換します。 .c_str() は非破壊的なので、ひきつづき cout で str を表示できます。
ファイル名は「sample.cpp」でも「test.cpp」でも平気でして、最後の「.cpp」以外は何でもいいのですが、とにかく最後にかならず拡張子「.cpp」をつけてください。
コードのファイルを「sample.cpp」という名前で保存したとしましょう。
このファイル「sample.cpp」は、まだ何もコンパイルされていません。
コマンド端末で
のように入力してコンパイルすると、コードに間違いがなければ、「a.out」というファイル名で実行ファイルが生成されます。
なお、もしコードにエラーがあれば、「a.out」は作成されずに、かわりにコマンド端末にエラーのある事を伝えるメッセージが表示されます。
ファイル「a.out」そのものの使用をするには、コマンド端末で、
と入力して実行することで、「a.out」を実行できます。「./」を冒頭につけるのを、忘れないようにしてください。「./」とは、カレントディレクトリー位置を意味します。通常、ログインした直後の状態では、カレントディレクトリーはホームディレクトリーに設定されている場合が多いと思いますので、ホームディレクトリーを探してください。きっと、「a.out」という名前のファイルがホームディレクトリー内に追加されているはずです。
「./a.out」というコマンドの意味は、「カレントディレクトリーにあるファイル『a.out』を実行しろ」という意味です。
この「a.out」に、さきほどコンパイルした「sample.cpp」がアセンブリ言語にコンパイルされた状態で置かれているので、よってコマンド「./a.out」の実行により、コード「sample.cpp」の内容が実行されます。
「./a.out」の実行により、コマンド端末に「ようこそ、C++言語へ。」と表示されれば、成功です。「ようこそ、C++言語へ。」と表示されていれば、正常にコンパイルされた実行ファイルを、正常に実行できた事になります。
では、ここではこのソースコード「sample.cpp」の内容について簡単に説明します。