C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++のコンストラクタとは?基本の使い方と種類をわかりやすく解説

本記事では、C++におけるコンストラクタ(constructor)の基本的な概念と、代表的な2つの種類(デフォルトコンストラクタ・引数付きコンストラクタ)について、サンプルコードと実行結果を交えながら解説します。

コンストラクタとは

コンストラクタは、クラスのオブジェクトが生成される際に自動的に呼び出される特別なメンバ関数です。主な特徴は以下の通りです。

  • クラス名と同じ名前を持つ
  • 戻り値の型を持たない(voidも指定しない)
  • オブジェクト生成時に自動的に実行され、メンバ変数の初期化などを行う

これにより、初期化忘れによる予期しない動作を防ぎ、安全で信頼性の高いコードを書くことができます。

デフォルトコンストラクタ

引数を取らないコンストラクタをデフォルトコンストラクタと呼びます。オブジェクト宣言時に暗黙的に呼び出され、メンバ変数に固定値を設定する場合などに使われます。

サンプルコード

#include <iostream>
using namespace std;

class construct {
public:
    int a, b;

    // デフォルトコンストラクタ
    construct() {
        a = 10;
        b = 20;
    }
};

int main() {
    construct c; // オブジェクト生成時にコンストラクタが呼ばれる
    cout << "a: " << c.a << endl
         << "b: " << c.b;
    return 0;
}

実行結果

a: 10
b: 20

この例では、construct c; の時点でコンストラクタが実行され、メンバ変数 ab がそれぞれ 10 と 20 に初期化されます。

引数付きコンストラクタ(パラメータ化コンストラクタ)

引数を受け取るコンストラクタを使うと、オブジェクトごとに異なる初期値を柔軟に設定できます。外部からの入力値や計算結果をもとにメンバ変数を初期化したい場合に便利です。

サンプルコード

#include <iostream>
using namespace std;

class Point {
private:
    int x, y;
public:
    // 引数付きコンストラクタ
    Point(int x1, int y1) {
        x = x1;
        y = y1;
    }

    int getX() {
        return x;
    }

    int getY() {
        return y;
    }
};

int main() {
    Point p1(10, 15); // 引数を渡してオブジェクトを生成
    cout << "p1.x = " << p1.getX()
         << ", p1.y = " << p1.getY();
    return 0;
}

実行結果

p1.x = 10, p1.y = 15

Point p1(10, 15); のように記述することで、生成時に座標 (10, 15) を渡し、その値でメンバ変数が初期化されます。

まとめ

  • コンストラクタはクラス名と同名で、戻り値を持たない特殊なメンバ関数である
  • 引数なしのデフォルトコンストラクタは、共通の初期値を設定するのに適している
  • 引数付きコンストラクタを使えば、オブジェクトごとに異なる値で初期化できる

コンストラクタを正しく理解することは、C++のオブジェクト指向プログラミングにおける第一歩です。ぜひ実際にコードを書いて、動作を確認してみてください。

  1. C++でプロセスを強制終了する方法:BFSを使った実装解説

    n個のプロセスがあると仮定します。各プロセスには、PID(プロセスID)と呼ばれる一意の識別子が割り当てられており、さらにPPID(親プロセスID)も持っています。各プロセスが持てる親プロセスは1つだけですが、子プロセスは1つでも複数でも構いません。これはまさに木構造と同じ形です。PPIDが0になるプロセスは1つだけであり、それはそのプロセスに親が存在しないことを意味します。また、すべてのPIDは一意な正の整数です。問題の概要ここでは、2つの整数リストを使ってプロセスの一覧を表現します。1つ目のリストには各プロセスのPIDが含まれ、2つ目のリストにはそれに対応するPPIDが含まれます。このとき

  2. C++で解くリスのナッツ収集シミュレーション ― 最小移動距離を求めるアルゴリズム

    問題概要 1本の木、1匹のリス、そして複数のナッツがフィールド上にあります。それぞれの位置は2次元グリッドのセルで表現されます。この問題の目的は、リスがすべてのナッツを集めて木の下に1個ずつ運ぶときの最小移動距離を求めることです。 リスの行動には次の制約があります。 一度に持てるナッツは最大1個 移動は上下左右の4方向で、隣接するセルへのみ可能 距離は移動回数(ステップ数)で表される たとえば、入力が「高さ: 5 / 幅: 7 / 木の位置: [2,2] / リスの位置: [4,4] / ナッツ: [[3,0], [2,5]]」の場合、出力は 12 となります。 解法のポイント まず、