C++入門|C++の最初のプログラム

C言語の修行を終えたら、次はいよいよC++の修行場へ。iostream、std、coutを使いこなして、C++最初のメッセージをコンソールに放とう。

ここからは、C++の基本文法に入っていきます。

これまでC言語では、printfを使ってコンソールに文字を表示してきました。
C++でも同じように文字を表示できますが、書き方は少し変わります。

C言語では、stdio.hを読み込み、printf関数を使って文字列を表示しました。
一方、C++では、iostreamというヘッダーを読み込み、coutという出力用のオブジェクトを使って文字列を表示します。

ドラゴンボール風にたとえるなら、C言語では昔ながらの修行装置を使って表示していたのに対し、C++では新しい高性能な修行装置を使って、ストリームというエネルギーの流れにメッセージを乗せて表示するイメージです。

C++では、C言語で学んだ基本を土台にしながら、名前空間、ストリーム、オブジェクトといった新しい考え方が登場します。
ただし、最初から難しく考えなくても大丈夫です。

まずは、C++のソースファイルを作り、main.cppに短いプログラムを書き、coutでメッセージを表示するところから始めましょう。

C言語で使ったものC++で使うもの役割
stdio.hiostream入出力機能を使うための準備
printfcoutコンソールに文字を表示する
\nendl改行する
.c.cppソースファイルの拡張子

C++の最初のプログラムでは、C言語との違いを少しずつ確認していきます。
特に、#include 、using namespace std;、cout、<<、endl の役割を押さえることが大切です。

図:C言語からC++の表示方法へ進む流れ

この図が示していること

この図では、C言語で使っていた表示方法から、C++で使う表示方法へ進む流れを表しています。

C言語では、stdio.hを読み込み、printfで文字を表示しました。
C++では、iostreamを読み込み、coutで文字を表示します。

C++はC言語の知識を土台にしながら、より新しい仕組みを使ってプログラムを書いていきます。
最初は見慣れない記号が出てきますが、役割をひとつずつ見ていけば自然に理解できます。

C++用のプロジェクトを作成する

C++のプログラムを書くには、まずC++用のプロジェクトを作成します。

Visual Studioでは、C言語のときと同じように、新しいプロジェクトを作成し、空のプロジェクトを選びます。
そして、C++用のソースファイルを追加していきます。

ここで大切なのは、ソースファイルの拡張子です。

C言語では、ソースファイルの拡張子に.cを使いました。
C++では、ソースファイルの拡張子に.cppを使います。

言語ソースファイル名の例拡張子
C言語main.c.c
C++main.cpp.cpp

拡張子が違うと、Visual Studioやコンパイラは、そのファイルをどの言語として扱うかを判断しやすくなります。

ドラゴンボール風にたとえるなら、.cはC言語修行用の巻物、.cppはC++修行用の巻物です。
見た目は似ていても、使う技や読み取り方が少し違います。

C++の学習では、これから作るソースファイルの拡張子を.cppにすることを意識しましょう。

C++用のプロジェクトの作成手順

「空のプロジェクト」を選択し「次へ」をクリックします。

プロジェクト名に「Chap2_01」と入力し「作成」をクリックします。

ソースファイルmain.cppを追加する

プロジェクトを作成したら、ソリューションエクスプローラーのソースファイルフォルダに、新しいソースファイルを追加します。

ファイル名はmain.cppにします。

C++では、main.cppが最初の修行巻物になります。
このファイルにC++のコードを書き、実行して、コンソールにメッセージを表示します。

作業内容
ソースファイルを追加するC++のコードを書くファイルを作る
ファイル名をmain.cppにするC++用のソースファイルとして扱う
ソリューションエクスプローラーで確認するmain.cppが追加されているか見る

ファイル名がmain.cになっているとC言語のソースファイルとして扱われます。
C++の学習では、必ずmain.cppになっていることを確認しましょう。

ドラゴンボール風に言えば、C++用の修行場に入るなら、C++専用の巻物を使う必要があります。
その巻物がmain.cppです。

C++の最初のプログラムを入力する

それでは、C++の最初のプログラムを見てみましょう。

ここでは、C++の出力機能を使って、コンソールにメッセージを表示します。

プロジェクト/ファイル名: Chap2_01/main.cpp

#include <iostream>

using namespace std;

int main(int argc, char** argv) {
    // C++の最初のメッセージを表示する
    cout << "C++ Training Start!" << endl;

    // プログラムが正常に終わったことを示す
    return 0;
}

このプログラムを実行すると、次のように表示されます。

C++ Training Start!

このプログラムには、C言語にはなかったC++らしい書き方が登場しています。

記述役割
#includeC++の入出力機能を使う準備
using namespace std;std名前空間を使いやすくする
coutコンソールへ出力するためのオブジェクト
<<データを出力先へ送る記号
endl改行して出力を整える
return 0;正常終了を知らせる

C言語のprintfと比べると、cout << 文字列 << endl; という書き方は少し独特に見えるかもしれません。

でも、考え方はシンプルです。
coutという出力先に、<<を使って文字列を流し込み、最後にendlで改行する、という流れです。

#include はC++の入出力を使う準備

プログラムの1行目には、次の記述があります。

#include <iostream>

#includeは、C言語のときにも登場しました。
外部の機能を使うために、必要なヘッダーを読み込む宣言です。

C言語では、printfを使うためにstdio.hを読み込みました。
C++では、coutを使うためにiostreamを読み込みます。

言語読み込むもの使えるようになるもの
C言語stdio.hprintfなど
C++iostreamcout、cin、endlなど

C++のiostreamには、標準入出力に関する機能が用意されています。
画面に出力するcout、キーボードから入力を受け取るcin、改行を行うendlなどを使うために必要です。

ドラゴンボール風にたとえるなら、iostreamはC++修行場にある高性能な通信装置の説明書です。
このヘッダーを読み込むことで、コンソールへメッセージを送るための道具が使えるようになります。

C++のヘッダーには.hが付かないものがある

C言語では、stdio.hのように.hが付いたヘッダーファイルを使いました。

一方、C++の標準ヘッダーでは、iostreamのように.hを付けない書き方を使います。

#include <iostream>

ここでは、iostream.hではなくiostreamと書きます。

種類特徴
C言語のヘッダーファイルstdio.h.hが付く
C++の標準ヘッダーiostream.hを付けない

これは、C言語のヘッダーファイルとC++の標準ヘッダーを区別するポイントのひとつです。

最初は、C++でcoutを使うときは#include と覚えておくとよいです。

ドラゴンボール風に言えば、C言語の巻物には.hという古い修行印が付いていました。
C++の標準ヘッダーは、新しい修行体系の巻物なので、iostreamのように名前だけで読み込むイメージです。

図:iostreamを読み込むとcoutが使えるようになる

この図が示していること

この図では、#include によって、C++の標準入出力機能が使えるようになることを表しています。

iostreamを読み込むことで、coutやcin、endlなどの機能を利用できるようになります。
今回のプログラムでは、この中のcoutとendlを使って、コンソールに文字列を表示しています。

C++の最初のプログラムでは、iostreamを読み込むことがとても大切です。

using namespace std;は標準名前空間を使う宣言

次に登場するのが、次の行です。

using namespace std;

これは、stdという名前空間を使うための宣言です。

名前空間とは、変数や関数、オブジェクトなどが置かれている場所のようなものです。
C++では、標準で用意されているcoutやendlなどが、stdという名前空間の中にあります。

そのため、本来は次のように書くこともできます。

std::cout << "C++ Training Start!" << std::endl;

ただし、using namespace std;を書いておくと、std::を省略して、coutやendlをそのまま使えるようになります。

書き方意味
using namespace std;std名前空間を使う
coutstd名前空間内の出力オブジェクトを使う
endlstd名前空間内の改行機能を使う
std::coutstdの中にあるcoutを明示して使う

ドラゴンボール風にたとえるなら、std名前空間はC++標準流派の道場です。
coutやendlは、その道場に置かれている標準技です。

using namespace std;を書くことで、「このプログラムでは標準流派の技をそのまま使います」と宣言しているようなイメージです。

名前空間は名前の衝突を防ぐための仕組み

名前空間は、C++から登場する大切な考え方です。

大きなプログラムでは、たくさんの関数や変数、オブジェクトが登場します。
もし同じ名前のものが複数あった場合、どれを使えばよいのか分からなくなることがあります。

名前空間は、その混乱を避けるための仕組みです。

ドラゴンボール風にたとえるなら、同じ技名を別々の流派が使っていたとしても、「亀仙流の技」「神流の技」のように流派を分けておけば混乱しません。

考え方C++での意味ドラゴンボール風のイメージ
名前空間名前を分類する場所流派や道場
stdC++標準の名前空間標準流派の道場
coutstdの中にある出力用オブジェクト表示パネルに送る標準技
endlstdの中にある改行操作行を切り替える標準技

今回の段階では、stdの中にcoutやendlがあるため、using namespace std;を書いて使いやすくしている、と理解できれば十分です。

coutはコンソールに出力するためのオブジェクト

プログラムの中心になるのが、次の行です。

cout << "C++ Training Start!" << endl;

coutは、コンソールに文字を出力するためのオブジェクトです。

C言語では、printf関数を使って文字を表示しました。
C++では、coutを使って文字を表示します。

C言語C++
printf("Hello World.\n");cout << "C++ Training Start!" << endl;

ここで大切なのは、C++の標準入出力がストリームという仕組みを使っていることです。

ストリームとは、データの流れのようなものです。
coutへ文字列を流し込むことで、その文字列がコンソールに表示されます。

ドラゴンボール風にたとえるなら、coutは修行場の表示パネルにつながるエネルギーの通り道です。
文字列というメッセージを、<<を使ってcoutへ流し込むと、表示パネルに出力されます。

<<はデータをcoutへ送る記号

C++の出力では、<<という記号を使います。

cout << "C++ Training Start!" << endl;

この<<は、右側のデータを左側の出力先へ送るイメージで読むと分かりやすいです。

記述意味
cout出力先
<<データを送る
"C++ Training Start!"表示したい文字列
endl改行する

この1行は、次のような流れになっています。

  1. coutへ文字列 C++ Training Start! を送る
  2. さらにcoutへendlを送る
  3. 文字列が表示され、改行される

ドラゴンボール風に言えば、<<は気の流れをコンソール装置へ送る通路です。
メッセージをcoutへ送り、最後にendlを送ることで、表示と改行を行います。

図:cout、<<、endlで文字列を表示する流れ

この図が示していること

この図では、coutを使って文字列を表示する流れを表しています。

coutはコンソールへの出力先です。
<<を使うことで、文字列やendlをcoutへ送ります。
送られた文字列はコンソール画面に表示され、endlによって改行されます。

C++の出力では、printfのように関数へ文字列を渡すのではなく、coutという出力先へデータを流し込むイメージで考えると分かりやすくなります。

endlは改行を表す

C++では、改行にendlを使うことができます。

cout << "C++ Training Start!" << endl;

endlは、出力したあとに改行するためのものです。

C言語では、\nを使って改行しました。
C++でも\nは使えますが、coutを使う場合はendlもよく使われます。

改行の方法
\nを使うcout << "C++ Training Start!\n";
endlを使うcout << "C++ Training Start!" << endl;

今回のプログラムでは、endlを使っています。

ドラゴンボール風にたとえるなら、endlは表示パネルの行を切り替える合図です。
メッセージを表示したあと、次の行へ移動します。

main関数はC++でもプログラムの入口

C言語と同じように、C++でもmain関数がプログラムの入口になります。

int main(int argc, char** argv) {

プログラムを実行すると、まずmain関数の中の処理が動きます。

今回のmain関数では、coutでメッセージを表示し、最後にreturn 0;で正常終了を知らせています。

記述役割
intmain関数が整数を返すことを示す
mainプログラムの開始地点
argc実行時に渡された情報の個数
argv実行時に渡された情報の中身
return 0;正常終了を知らせる

今回のサンプルでは、argcとargvは使っていません。
ただし、C言語やC++では、実行時の情報を受け取れるmain関数の形としてよく登場します。

ドラゴンボール風に言えば、main関数はC++修行場の入口です。
この入口に入ると、coutでメッセージを表示する修行が始まり、return 0;で修行完了を報告します。

C言語のprintfとC++のcoutの違い

C言語で文字を表示するときは、printfを使いました。

printf("Hello World.\n");

C++では、coutを使って表示します。

cout << "C++ Training Start!" << endl;

どちらもコンソールに文字を表示するためのものですが、考え方が少し違います。

項目printfcout
主に使う言語C言語C++
必要な読み込みstdio.hiostream
書き方関数に文字列を渡すストリームへデータを送る
改行\nendl または \n
代表的な形printf("文字列\n");cout << "文字列" << endl;

printfは、関数に表示したい内容を渡すイメージです。
coutは、出力先にデータを流し込むイメージです。

ドラゴンボール風にたとえるなら、printfは表示装置に直接命令を出す古い型の技です。
coutは、ストリームというエネルギーの流れにメッセージを乗せて送る新しい型の技です。

どちらも表示できますが、C++ではcoutを使う書き方に慣れていくことが大切です。

C++ではオブジェクトやクラスの考え方が登場する

C++では、C言語にはなかったオブジェクトやクラスという考え方が登場します。

今回出てきたcoutも、標準出力を扱うためのオブジェクトです。

ここでは、オブジェクトやクラスを深く説明する必要はありません。
今は、coutはC++でコンソールに出力するために用意された標準的なもの、と理解しておけば大丈夫です。

ドラゴンボール風にたとえるなら、C言語では関数という技を中心に修行していました。
C++では、技だけでなく、戦士そのものや修行装置そのものを部品として扱う世界に進んでいきます。

C言語の考え方C++で加わる考え方
関数を中心に処理を書くオブジェクトやクラスも使う
printfのような関数で表示するcoutのようなオブジェクトで表示する
手続きの流れを重視する部品同士の関係も重視する

オブジェクトやクラスは、これからC++を学ぶうえでとても重要になります。
ただし、最初の段階では、C++ではcoutのようなオブジェクトを使って出力するのだと押さえておきましょう。

C++最初のプログラムの流れを整理する

今回のプログラムは、とても短いですが、C++の基本が詰まっています。

#include <iostream>

using namespace std;

int main(int argc, char** argv) {
    cout << "C++ Training Start!" << endl;
    return 0;
}

処理の流れは次のようになります。

順番処理内容
1iostreamを読み込むcoutやendlを使う準備をする
2std名前空間を使うcoutやendlを簡単に書けるようにする
3main関数から開始プログラムの処理が始まる
4coutで表示コンソールへ文字列を送る
5endlで改行表示後に改行する
6return 0;正常終了を知らせる

この流れを覚えておくと、C++の最初のプログラムを読みやすくなります。

C++では、C言語で学んだmain関数やreturn 0;の考え方をそのまま使いながら、iostream、std、cout、endlのような新しい要素が加わります。

C++の最初のプログラムで覚えておきたいポイント

C++の最初のプログラムでは、次のポイントを押さえておきましょう。

ポイント内容
C++のファイルは.cppにするmain.cppとして作成する
iostreamを読み込むcoutやendlを使うため
using namespace std;を書くstd名前空間を使いやすくする
coutで表示するコンソールへ文字列を出力する
<<でデータを送るcoutへ文字列やendlを渡す
endlで改行する表示後に次の行へ進める
main関数から始まるC++でもプログラムの入口はmain

最初は、cout << 文字列 << endl; という形に慣れることが大切です。

C言語のprintfに比べると書き方は違いますが、目的は同じです。
コンソールにメッセージを表示するための基本技です。

ドラゴンボール風に言えば、C言語の修行場で覚えた表示技を、C++の新しい修行場で使える形に進化させたものです。

C++の学習は、この小さなプログラムから始まります。
iostreamで準備し、std名前空間を使い、coutでメッセージを出力する。
この流れをつかめば、C++の本格的な文法へ進む準備が整います。