【C++入門】デフォルトコンストラクタの基礎と使い方をわかりやすく解説
C++のコンストラクタとは
コンストラクタ(constructor)とは、クラスの新しいオブジェクト(インスタンス)を生成した瞬間に自動的に実行される特殊なメンバ関数です。オブジェクトの初期化処理を記述するための仕組みで、C++プログラミングにおいて非常に重要な役割を担っています。
コンストラクタの基本ルール
- クラス名と完全に同じ名前を持つ
- 戻り値の型を持たない(voidすら指定できない)
- オブジェクト生成時に自動的に呼び出される
- 特に引数を取らないコンストラクタは「デフォルトコンストラクタ」と呼ばれる
メンバ変数に初期値を設定したい場合など、コンストラクタはとても便利です。以下のサンプルコードで、コンストラクタの基本的な動作を確認してみましょう。
サンプルコード
#include <iostream>
using namespace std;
class Line {
public:
void setLength( double len );
double getLength( void );
Line(); // これがコンストラクタ
private:
double length;
};
// コンストラクタを含むメンバ関数の定義
Line::Line(void) {
cout << "Object is being created" << endl;
}
void Line::setLength( double len ) {
length = len;
}
double Line::getLength( void ) {
return length;
}
// プログラムのmain関数
int main() {
Line line; // オブジェクト生成時にコンストラクタが呼ばれる
// lineの長さを設定
line.setLength(6.0);
cout << "Length of line : " << line.getLength() << endl;
return 0;
}
実行結果
Object is being created Length of line : 6
コードの解説
このプログラムでは、Lineクラスを定義し、引数を取らないデフォルトコンストラクタLine()を宣言しています。
main関数内でLine line;と記述してオブジェクトを生成すると、明示的に呼び出さなくてもコンストラクタが自動的に実行され、「Object is being created」というメッセージが出力されます。オブジェクトの生成時に必ずコンストラクタが動く、というのが重要なポイントです。
その後、setLength(6.0)でメンバ変数lengthに値を設定し、getLength()で取得して表示しています。実践的には、コンストラクタの中でメンバ変数をあらかじめ初期化しておくことで、未初期化によるバグを防ぎ、より安全で信頼性の高いコードを書くことができます。
-
C++で点集合の線対称(ラインリフレクション)を判定するアルゴリズム
問題概要2次元平面上にn個の点が与えられます。このとき、y軸に平行な直線で全ての点を鏡映(反射)した結果が、元の点集合と完全に一致するような直線が存在するかどうかを判定します。言い換えれば、ある直線を対称軸として全ての点を反転させたとき、反転後の点の集合が元の集合と同一になるかを確認する問題です。例えば、入力が points = [[1,1],[-1,1]] の場合を考えてみましょう。この場合、x = 0 の直線(y軸)を対称軸とすると、点 (1,1) は (-1,1) へ、(-1,1) は (1,1) へと移ります。点集合全体としては変化がないため、出力は true となります。解法のポイン
-
C++で同一直線上に存在する最大点数を求めるアルゴリズム
問題概要 2次元平面上に複数の点が与えられたとき、同じ直線上に存在する点の最大数を求めるのがこの問題の目的です。 例えば、下図のような6つの点が与えられた場合、最も多くの点が乗っている直線上には4つの点が存在します。 解法のアプローチ この問題は、隣り合う2点を通る直線を基準にして、残りのすべての点がその直線上に乗っているかどうかを順番に判定していくことで解けます。 3点 (x1, y1)、(x2, y2)、(x3, y3) が同一直線上にあるかどうかは、「傾きが等しい」こと、すなわち外積(クロス積)が0になることを利用して判定できます。 (y3 − y2) × (x2 − x1) = (