【C++】コンストラクタのオーバーロードとは?基本ルールと実装例を解説
オブジェクト指向言語の中核機能のひとつに「関数のオーバーロード」があります。これは、引数の数や型が異なっていれば、同じ名前の関数を複数定義できる仕組みです。本記事では、このオーバーロードをクラスのコンストラクタに適用する「コンストラクタのオーバーロード」について、その考え方と具体的な実装方法を解説します。
コンストラクタオーバーロードの重要ポイント
コンストラクタをオーバーロードする際は、次の3つのポイントを押さえておきましょう。
- オーバーロードされたコンストラクタは、クラス名と同じ名前を持ち、引数の数(または型)が互いに異なる必要があります。
- 実際にどのコンストラクタが呼び出されるかは、オブジェクト生成時に渡された引数の「数」と「型」によって決まります。
- オブジェクト生成時には適切な引数を渡す必要があります。引数が曖昧だと、どのコンストラクタを呼び出すべきか判断できず、コンパイルエラーになることがあります。
サンプルコード
以下は、長方形を表す Rect クラスに、引数なしのデフォルトコンストラクタと、2つの int 型引数を受け取るコンストラクタを定義した例です。
#include <iostream>
using namespace std;
class Rect {
private:
int area;
public:
Rect() { // 引数なしのコンストラクタ
area = 0;
}
Rect(int a, int b) { // 引数2つのコンストラクタ
area = a * b;
}
void display() {
cout << "The area is: " << area << endl;
}
};
main() {
Rect r1; // デフォルトコンストラクタが呼ばれる
Rect r2(2, 6); // 引数2つのコンストラクタが呼ばれる
r1.display();
r2.display();
}
実行結果
The area is: 0 The area is: 12
コードの解説
r1 は引数を指定せずに生成しているため、引数なしのコンストラクタ Rect() が呼び出され、メンバ変数 area には 0 が代入されます。一方、r2 は 2 と 6 を引数として渡しているため、Rect(int a, int b) が呼び出され、面積として 12 が計算されます。
このようにコンストラクタをオーバーロードすると、ひとつのクラスで複数の初期化パターンを提供できます。たとえば「初期値なしで生成」「幅と高さを指定して生成」「一辺の長さだけ指定して正方形として生成」など、用途に応じた柔軟なオブジェクト生成が可能になり、コードの再利用性と可読性が大きく向上します。
-
C++で平行四辺形に内接する三角形の面積を計算する方法
図形の面積とは、その図形が二次元平面上で占める広さのことです。三角形は、3つの辺を持つ多角形です。平行四辺形は、向かい合う2組の辺がそれぞれ平行で、長さも等しい四角形です。問題の概要このプログラムでは、底辺と高さがわかっている平行四辺形を扱います。この平行四辺形の中には、平行四辺形と同じ底辺を共有する三角形が内接しています。与えられた底辺と高さの値を使って、この三角形の面積を計算することが目的です。三角形の面積の公式平行四辺形の底辺をそのまま使い、平行四辺形と同じ高さを持つ三角形の面積は、次の公式で求められます。面積 = ½ × 底辺(b) × 高さ(h)つまり、面積 = 0.5 × b ×
-
C++で正方形の外接円の面積を求める方法
本記事では、正方形の一辺の長さが与えられたときに、その正方形の外接円の面積を求める方法について解説します。まず、理解を深めるために基本的な定義をおさらいしましょう。 基本用語の定義 正方形:すべての辺の長さが等しい四角形のことです。 外接円:多角形のすべての頂点に接する円のことです。 面積:二次元図形の広がりの大きさを数量的に表したものです。 外接円の面積の求め方 正方形の外接円の面積を計算するには、円と正方形それぞれのパラメータの間にある関係を見つける必要があります。 下の図のように、正方形のすべての頂点が円に接しています。この図から読み取れる重要な性質は、正方形の対角線の長さが円の直径