C++プログラミングの基礎【現役エンジニアがわかりやすく解説】

PROGRAM

C++プログラミングの基礎を知りたい方に。

この記事を読まれている方は、

  • C++のプログラミングがどんなものか知りたい
  • C++の簡単な書き方が知りたい
  • C++が使われる場面を知りたい

おそらくこのように考えている方が多いと思います。

この記事を書いている私は、
プログラミング未経験から転職を果たした現役のWeb系エンジニアです。
エンジニア歴は3年ですが、本業とは別にフリーランスの副業で月10万円ほど、多いときで20万円ほどの収入があります。

この記事では、現役のエンジニアが、C++プログラミングの基礎を解説しています。

プログラミング言語のC++の特徴

プログラミング言語のC++の特徴

C++はプログラミング言語のひとつで、静的型付けのコンパイル言語で、オブジェクト指向型の言語です。
読み方は日本では「シープラプラ」や「シープラ」などと呼ばれることが多いです。

静的型付けの言語とは、簡単に言うと、データを文字列型や数値型、論理型などに分ける必要がある言語のことです。

コンパイル言語とは、プログラムの実行前に、開発者の方でコンパイラーを使って構文チェックなどをしたうえで中間言語に変換しないと動作しない言語のことです。

一方、コンパイル言語と対をなすスクリプト言語とは、プログラム実行前にコンパイルをする必要のない言語のことで、書いた後はすぐにプログラムを実行することができる言語のことです。

一般に、コンパイル言語は、処理速度がスクリプト言語に比べて速くなります。速度が求められる処理では、コンパイル言語が使用されることが多いです。

オブジェクト指向型言語とは、オブジェクトという概念を持つ言語のことで、簡単に言うと、データ構造として、配列や構造体に加えて、オブジェクト(クラス)があるということです。
オブジェクトのおかげで、ソースコードのメンテナンスがしやすかったり、機能の流用ができます。

C++はC言語にオブジェクト指向の概念を追加して、効率の良いプログラミングができるように、と改良された言語です。 「C言語の拡張」という意味でプラスが付いています。1982年に登場したので、古そうなイメージがありますが、C++にはちゃんと「クラス」があります。

統合開発環境(IDE)は、CLion、IntelliJ IDEA、Visual Studio、Eclipse、C++Builderなどがあります。

IDEを使うことで、WindowsアプリやWeb系、Android・iOSアプリ、ゲームなども開発することができる汎用性の高い言語になります。

C言語に比べるとC++は、例えばstring型の登場などで、だいぶ書きやすくなりました。
C言語では、char配列の形でしか文字列を保持できなかったのです。

C++は、C言語に様々な機能が追加され、それにより書きやすさも向上したため、初心者にもオススメの言語のひとつです。ただ、即戦力にはなりにくいので、稼ぐために手っ取り早く力を付けたい場合はWeb系の言語がオススメです。

C++の用途

C++の用途

C++は静的型付けのコンパイル言語ということもあり、速度が重視される開発で利用されることの多い言語です。

C++を使えば、たいていのことは何でもできてしまいます。

例えば、Visual Studioを使ったWindowsアプリの開発もできますし、数は少ないもののWebアプリケーションを作ることも可能です。
また、スマホアプリも、Androidアプリであれば通常Javaで開発されますが、速度重視でC++で開発をするケースもあります。
その他、大量の処理を裁かなければいけないゲームなどでは、C++が採用されるケースも多いです。

C++の書き方

C++の書き方

ここでは簡単に書き方を少しだけ紹介します。実際に始める気になったら、ぜひ参考書などの教材を参考にして、試してみて下さい。

Hello World!を画面に出力する

まずはお決まりのHello World!という文字列を画面に出力する方法から。

#include <stdio.h>

int main(void){
    printf("Hello World!");
}

これで出力することができます。
C言語と同じように、main関数を書かなければ動きません。また、stdio.hという入出力の標準ライブラリも冒頭で呼ぶ必要があります。

コンパイル言語のため、プログラム実行前にはコンパイラーを使って中間言語に変換する必要があります。

変数宣言と分岐処理

次は少し踏み込んで、変数宣言と分岐処理をしてみます。

#include <stdio.h>

int main(void){
    int age = 19;
    
    if(age<20){
        printf("未成年");
    } else {
        printf("成人");
    }
}

上記の例では、まずageという数値型の変数を作り、その中に19という数値を入れています。
次にageが20未満であれば”未成年”という文字列を、それ以外であれば”成人”という文字列を出力するような分岐処理をしています。

配列と繰返処理

続いて、配列の使い方と繰返処理について、解説します。

ここでは配列を作って、以下のようにデータを出力することにしましょう。

佐藤,田中,小林

これを出力するコードは以下です。

#include <stdio.h>
#include <string>

using namespace std;
int main(void){
    std::string students[] = {"佐藤","田中","小林"};
    
    int row_num = sizeof students / sizeof students[0];
    for(int i=0;i<row_num;i++)
    {
        printf("%s", students[i].c_str());
        if (i<row_num-1) {printf(",");}
    }
    
    return 0;
    
}

上記の例では、まず文字列型の配列studentsに「佐藤」「田中」「小林」の3つの文字列を格納しています。
その後、数値型のカウンタ変数iを0に初期セットし、配列studentsの要素の数に到達するまでループでiを1ずつ増やしてまわしていきます。その際に、printf関数を使い、配列studentsのi番目の要素の値を出力し、最後の要素以外、その後に「,(カンマ)」を出力しています。

ここでは冒頭のincludeで、string型を利用するため、stdio.hの他、stringクラスも読み込んでいます。

構造体の取り扱い

最後に構造体の取り扱い方法について解説します。

ここではエクセルのようなデータを作って、以下のようにデータを出力することにしましょう。

名前:佐藤,性別:男性
名前:田中,性別:女性
名前:小林,性別:女性

これを出力するコードは以下です。

#include <stdio.h>
#include <string>
#include 

using namespace std;
int main(void){
    std::map first_row = {{"A", "佐藤"},{"B", "男性"}};
    std::map second_row = {{"A", "田中"},{"B", "女性"}};
    std::map third_row = {{"A", "小林"},{"B", "女性"}};
    std::map excel_data[] = {first_row,second_row,third_row};
    
    int row_num = sizeof excel_data / sizeof excel_data[0];
    for(int i=0;i<row_num;i++)
    {
        printf("%s", excel_data[i]["A"].c_str());
        printf(",");
        printf("%s\n", excel_data[i]["B"].c_str());
    }
    
    return 0;
    
}

上記の例では、まずfirst_row, second_row, third_rowという、キー・値がともに文字列型の連想配列を3つ作り、Aというキー(列)に名前を、Bのキーに性別の値を入れていきます。
そして、それら全てをexcel_dataという連想配列型の連想配列に入れています。
その後、数値型のカウンタ変数iを0に初期セットし、配列excel_dataの要素の数に到達するまでループでiを1ずつ増やしてまわしていきます。その際に、printf関数を使い、配列excel_dataのi番目の要素の中のA列とB列の値を出力しています。

ここでは冒頭のincludeで、連想配列型を利用するため、mapクラスも読み込んでいます。

まとめ:C++はC言語の拡張版で汎用性の高い言語

まとめ:C++はC言語の拡張版で汎用性の高い言語

C++の良さを簡単にまとめると、以下のとおりです。

  • 書きやすくてシンプル ← C言語を便利に拡張
  • 汎用性が高い ← 基本なんでも開発できる
  • 処理速度が速い ←コンパイル言語・ベース言語

つまりC++は、C言語を拡張しているので、シンプルさを維持しつつも書きやすく、かつベース言語のため、汎用性が高く、処理速度の速いプログラミング言語となっています。

ベース言語なだけに、JavaやPHP、C#、Go言語などが登場した現代においても一定の需要があります。もし別の言語を将来的に習得するにしても、C++の習得は必ず役に立つことでしょう。

C++はC言語に比べるとコーディングはかなり楽に感じますが、オブジェクト指向の理解が、初心者の方には難しいと感じるかもしれません。もし独学でできなさそうな方は、プログラミングスクールも手段の一つに入れると良いと思います。