この記事のランク | |
---|---|
読む時間 | 3分 |
重要度 |
C++(シープラスプラス)は1983年に開発されたプログラミング言語のひとつで、C言語にオブジェクト指向という考え方が追加された言語です。
C++は、主にスマートフォンアプリ、ゲーム開発のほか、画像処理や制御システム、IoTの開発など幅広い分野で活用されています。
Twitter(@nana_korobi04)でも情報発信していますので、
フォローいただけると嬉しいです!
C++の特徴
まずC++の特徴を下記の4点で解説していきます。
処理速度が速い
C++はC言語の特徴である高速処理が継承されており、パフォーマンスが求められる基幹システムや、処理が集中する大規模なシステムに適しています。
なお、C言語と互換性があり同時に使用することができますが、後継言語のC#とは互換性はありません。
コードの記述が少ない
C言語と同じく機械語に近いプログラミング言語であるにも関わらず、オブジェクト指向という考え方が取り入れられたことでC言語に比べて少ないコーディング量で開発ができます。
オブジェクト指向については下記の記事でご紹介しています。
是非ご参考にしてください!
画像処理が得意
C++ではOpenCVというIntel社が開発したライブラリを導入することで、画像をデータとして認識することができます。
OpenCVは画像の情報から、ネコや犬といった物体の検出や、背景のトリミング・リサイズなどができます。
電子機器の操作が得意
C++は、ハードウェアの制御ができるため、組み込みシステムと呼ばれるスマートフォンや家電などの電子機器、自動車や産業用ロボットなどに組み込まれています。
また、IoT(Internet of Things)と呼ばれる、インターネットと電子機器をつないで操作することも可能です。
例えば、外出先からエアコンやシャッターの開閉ができたり、冷蔵庫の中身をカメラで確認できる技術です。
C++のソースの書き方
ここでは基本的なC++のソースの書き方を説明します。
文字を表示する
以下はコンソールに文字を表示する一般的なC++のサンプルコードです。
#include <iostream>
int main(int argc, char* argv[])
{
std::cout << “Hello ” << argv << std::endl;
}
return 0;
1行目の「#include 」はinclude(含む)という単語の意味通り という機能を呼び出している処理です。
<iostream>とは、input output streamの略で、プログラミングの世界で「標準出力/入力」と呼ばれる文字の入力や出力機能を束ねるチームリーダーのようなものです。
4行目の「std::cout」をiostreamの「メンバ」といい、「iostream」と「std::cout」は親子のような関係になっています。
std::coutは、コンソールに表示したい文字を渡すことで、それが実現できます。
続く「<<」は出力演算子と呼ばれ、右となりの「“Hello ”」をコンソールに表示します。
さらに右となりの「argv[ 1]」はコマンドライン引数を入れる箱のようなものです。
コマンドライン引数とは、このC++のソースコードからプログラムを作ってコマンドで実行する際に、プログラム名の右となりに記述する値を指します。
例) プログラム名をtest.cppとした場合
test.cpp Jiro … コンソールから実行
Hello Jiro → コンソールに出力される結果
最後の「std::endl;」は改行および文字を一時的に保管するためのメモリを解放(クリア)するための記述です。
関数はいくつかの処理や計算をまとめたもので、最後に結果を返すのが一般的な役割です。
頭の「int」はIntenger(整数)という意味で、このmain関数を実行すると何らかの整数値を返す処理であることを表しています。
その次の()の中がコマンド引数と呼ばれ、「データ型 変数名」という順番で指定します。
「int argc」であれば、頭にコマンドラインの引数の数を取得するため整数を扱うintのデータ型を指定すると、その後ろのargc変数(argument countの略)に、引数の数がセットされます。
カンマで区切られた右となりの「char* argv[]」は、プログラムを実行する際にプログラムに渡す値をセットするための引数で、文字を扱うchar(characterの略)のデータ型を指定し、その後ろのargv変数は、argument vectorの略で、引数の値がセットされます。
charの後ろに付いている*(アスタリスク)はポインタといって、アドレスを保持するための変数を指定するためのものです。
変数の値(例えばJiro)はコンピューター上のどこかのメモリに格納されます。
そのメモリの場所をアドレスという情報で特定することができるようになっており、ポインタは、そのアドレスの情報を保持することができます。
なお、&(アンパサンド)は値(Jiro)という実体ではなく、値が格納された変数のアドレスを取得することができます。
なぜ、わざわざ変数の中身を直接参照せずにアドレスを取得するかというと、別の関数で使用されている変数を参照できることや、大元の変数の値が変われば、自動的にポインタ変数の中身にも反映することができます。
argvの後ろにある[](スクエアブラケット)は大カッコとも呼ばれ、配列を意味しています。
配列とは情報を記憶しておくための変数が連なったもので、同じ属性の異なる値などを保管するときに便利な機能です。
[]の中にセットした数字の分だけ変数の箱ができるイメージです。
今回のサンプルデータの[]には数字が入っていませんが、いくつ引数が渡されるか分からない場合は数字を入れなくても渡された引数の数に応じて自動的にセットされます。
なお、この[]の中の数字は「添字(そえじ)」やIndex(インデックス)と呼びます。
最後、6行目の「return 0;」は戻り値と呼ばれ、main関数の結果を返すためのものです。
戻り値’0’は正常終了で、’0’以外は異常終了と判定するのがルールとなっています。
今回は文字を表示するためのサンプルコードなので戻り値は正常終了の’0’としていますが、エラー処理を作る場合は「return 1;」などに書き換えることも可能です。
コマンドライン引数の数だけ繰り返す
次は繰り返しの処理のコードの書き方を説明します。
とは言っても、前述のサンプルコードの一部に手を加えるだけです。
#include <iostream>
int main(int argc, char* argv[])
{
for (int i = 0; i < 3; i++) { ← 追加箇所
std::cout << “Hello ” << argv[i] << std::endl;
← argv からargv[i]に変更
} ← 追加箇所
}
return 0;
追加箇所のforは「for文(ふぉーぶん)」と呼ばれ繰り返しをする構文で、()の中に繰り返す条件を指定して利用します。
構文 : for(初期化式; 条件式; 反復式) { 繰り返す内容 }
サンプルコードの、(int i = 0; i < 3; i++)を分解すると、「int i = 0;」でint型のiという変数に’0’を初期値としてセットしています。
次の「i < 3;」は、変数iが3未満になるまで繰り返すという意味で、最後の「i++」はインクリメントと呼ばれて、1回処理するごとに変数iの値を+1するという意味です。
argv[ 1]からargv[i]に変更した箇所は、[]の中が1→変数iとなっていますが、これはfor文の中にある変数iのことで、繰り返されるたびに値が1づつ増えていきます。
このサンプルコードを実行すると以下のようになります。
sample.cpp Jiro Miki … コンソールから実行
Hello sample.cpp → コンソールに出力される結果(1行目)
Hello Jiro → コンソールに出力される結果(2行目)
Hello Miki → コンソールに出力される結果(3行目)
まとめ
今回は標準出力を題材にC++の基本的なソースの書き方を説明しました。
特にポインタ、アドレス、配列については慣れるまでは難しく感じますが、コーディングを繰り返していくうちに利便性が分かっていきます。
特にC言語、C++言語はメモリ管理を意識するため、JavaやPythonといった他の言語では意識しないハードウェアの知識をプログラミング言語を通して学べるのがメリットですよ。