C++/クイックツアー

出典: フリー教科書『ウィキブックス(Wikibooks)』
< C++


C++は高性能なプログラムを作成するために広く使われている強力なプログラミング言語です。本章「クイックツアー」では、C++の基本概念と構文を短時間で理解できるように、必要最低限の情報を効率的に提供します。初心者がC++の魅力を体験し、次のステップへ進むための基礎を築くことを目的としています。プログラムの基本構造、データ型、制御構造、関数、クラスなど、主要なトピックを具体例と共にわかりやすく説明します。C++の世界への第一歩を踏み出しましょう。

C++の基本構造[編集]

プログラムの基本構造[編集]

C++プログラムは、必ずmain関数から始まります。 この関数はプログラムのエントリーポイントであり、main関数が終了するとプログラムの実行も終了します。

#include <iostream>

auto main() -> int {
    std::cout << "Hello, World!" << std::endl;
    return 0;
}

この例では、#include <iostream>が標準入出力ライブラリをインクルードし、std::coutでコンソールにメッセージを表示します。

コメント[編集]

コメントはコード内に説明やメモを追加するために使います。コンパイラはコメントを無視します。

// これはシングルラインコメントです
/*
これは
マルチラインコメントです
*/

基本的なデータ型と変数[編集]

データ型[編集]

C++にはさまざまなデータ型があります。ここでは基本的なものを紹介します。

int i{10};       // 整数型
float f{3.14};   // 浮動小数点型
char c{'A'};     // 文字型
bool b{true};    // ブール型

変数の宣言と初期化[編集]

変数を使う前には必ず宣言する必要があります。宣言時に初期化も行えます。

int a;     // 宣言
a = 5;     // 代入
int b{10}; // 宣言と初期化

演算子[編集]

算術演算子[編集]

算術演算子は基本的な数学的操作を行います。

int sum = 5 + 3;         // 足し算
int difference = 5 - 3;  // 引き算
int product = 5 * 3;     // 掛け算
int quotient = 5 / 3;    // 割り算
int remainder = 5 % 3;   // 剰余

複合代入演算子[編集]

複合代入演算子は演算と代入を同時に行います。

int a{10};
a += 5;  // a は 15 になる
a -= 3;  // a は 12 になる

インクリメントとデクリメント[編集]

インクリメントとデクリメントは変数の値を1ずつ増減します。

int a{5};
a++; // a は 6 になる
a--; // a は 5 に戻る

制御構造[編集]

条件分岐[編集]

条件分岐は、条件に応じて異なるコードを実行します。

int a{10};
if (a > 5) {
    std::cout << "a は 5 より大きい" << std::endl;
} else if (a == 5) {
    std::cout << "a は 5" << std::endl;
} else {
    std::cout << "a は 5 より小さい" << std::endl;
}

ループ[編集]

ループは同じコードを繰り返し実行します。

for (int i = 0; i < 5; i++) {
    std::cout << i << std::endl;
}

int j{0};
while (j < 5) {
    std::cout << j << std::endl;
    j++;
}

int k{0};
do {
    std::cout << k << std::endl;
    k++;
} while (k < 5);

int ary = {2, 3, 5, 7, 11};
for (auto n : ary) {
    std::cout << n << std::endl;
}

配列と文字列[編集]

配列[編集]

配列は同じデータ型の複数の値を格納するためのデータ構造です。

int arr[3] = {1, 2, 3};
std::cout << arr[0] << std::endl; // 1
std::cout << arr[1] << std::endl; // 2
std::cout << arr[2] << std::endl; // 3

文字列[編集]

文字列は文字の配列です。C++ではCスタイル文字列とstd::stringが使用されます。

char cstr[] = "Hello";
std::cout << cstr << std::endl;

#include <string>
std::string str{"World"};
std::cout << str << std::endl;

関数[編集]

テンプレート:C++/関数

関数の宣言と定義[編集]

関数は特定のタスクを実行するコードのブロックです。

auto add(int a, int b) -> int {
    return a + b;
}

auto main() -> int {
    int result = add(3, 4);
    std::cout << "3 + 4 = " << result << std::endl;
    return 0;
}

オーバーロード[編集]

関数のオーバーロードは、同じ名前の関数を異なる引数リストで定義することです。

auto add(int a, int b) -> int {
    return a + b;
}

auto add(double a, double b) -> double {
    return a + b;
}

auto main() -> int {
    std::cout << "int: " << add(3, 4) << std::endl; // 7
    std::cout << "double: " << add(3.0, 4.0) << std::endl; // 7.0
    return 0;
}

ポインターと参照[編集]

ポインター[編集]

ポインターは変数のメモリアドレスを格納する変数です。

int a{10};
int* p = &a;
std::cout << "a の値: " << a << std::endl;
std::cout << "a のアドレス: " << p << std::endl;
std::cout << "p が指す値: " << *p << std::endl;

参照[編集]

参照は既存の変数への別名を作成します。

int a{10};
int& ref = a;
std::cout << "a の値: " << a << std::endl;
std::cout << "ref の値: " << ref << std::endl;
ref = 20;
std::cout << "a の新しい値: " << a << std::endl;

クラスとオブジェクト指向[編集]

クラスの基本[編集]

クラスはデータとそれに関連する関数をまとめたデータ構造です。

class Person {
 public:
    std::string name;
    int age;

    auto introduce() -> void {
        std::cout << "名前: " << name << ", 年齢: " << age << std::endl;
    }
};

auto main() -> int {
    Person person{"太郎", 30};
    person.introduce();
    return 0;
}

コンストラクタとデストラクタ[編集]

コンストラクタはオブジェクトの初期化を行い、デストラクタはオブジェクトの終了時にリソースを解放します。

class Person {
 public:
    std::string name;
    int age;

    Person(std::string n, int a) : name(n), age(a) {
        std::cout << "コンストラクタ呼び出し: " << name << std::endl;
    }

    ~Person() {
        std::cout << "デストラクタ呼び出し: " << name << std::endl;
    }

    auto introduce() -> void {
        std::cout << "名前: " << name << ", 年齢: " << age << std::endl;
    }
};

auto main() -> int {
    Person person("太郎", 30);
    person.introduce();
    return 0;
}

標準ライブラリの活用[編集]

ベクター[編集]

std::vectorは動的配列を実現する標準ライブラリのコンテナです。

#include <vector>
#include <iostream>

auto main() -> int {
    std::vector<int> vec = {1, 2, 3, 4, 5};
    vec.push_back(6);
    for (int n : vec) {
        std::cout << n << std::endl;
    }
    return 0;
}

スマートポインター[編集]

スマートポインターはメモリ管理を自動化します。std::unique_ptrstd::shared_ptrがよく使われます。

#include <memory>
#include <iostream>

auto useUniquePtr() -> void {
    std::unique_ptr<int> p = std::make_unique<int>(10);
    std::cout << "unique_ptr の値: " << *p << std::endl;
}

auto useSharedPtr() -> void{
    std::shared_ptr<int> p1 = std::make_shared<int>(20);
    std::shared_ptr<int> p2 = p1;
    std::cout << "shared_ptr の値: " << *p1 << ", 参照カウント: " << p1.use_count() << std::endl;
}

auto main() -> int {
    useUniquePtr();
    useSharedPtr();
    return 0;
}

総括と次のステップ[編集]

クイックツアーのまとめ[編集]

この章では、C++の基本的な構造や概念についての簡単な紹介を行いました。基本構造、データ型、制御構造、関数、クラス、標準ライブラリの使い方など、プログラムを書く上で重要な要素を学びました。

次のステップ[編集]

このクイックツアーで学んだ知識を基に、さらに詳細なC++の学習を進めましょう。次のステップとして、C++の標準ライブラリの深掘り、オブジェクト指向プログラミングの概念、テンプレートや例外処理などの高度なトピックを学ぶことで、より強力なプログラマーになれます。