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

【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 が計算されます。

このようにコンストラクタをオーバーロードすると、ひとつのクラスで複数の初期化パターンを提供できます。たとえば「初期値なしで生成」「幅と高さを指定して生成」「一辺の長さだけ指定して正方形として生成」など、用途に応じた柔軟なオブジェクト生成が可能になり、コードの再利用性と可読性が大きく向上します。

  1. C++で平行四辺形に内接する三角形の面積を計算する方法

    図形の面積とは、その図形が二次元平面上で占める広さのことです。三角形は、3つの辺を持つ多角形です。平行四辺形は、向かい合う2組の辺がそれぞれ平行で、長さも等しい四角形です。問題の概要このプログラムでは、底辺と高さがわかっている平行四辺形を扱います。この平行四辺形の中には、平行四辺形と同じ底辺を共有する三角形が内接しています。与えられた底辺と高さの値を使って、この三角形の面積を計算することが目的です。三角形の面積の公式平行四辺形の底辺をそのまま使い、平行四辺形と同じ高さを持つ三角形の面積は、次の公式で求められます。面積 = ½ × 底辺(b) × 高さ(h)つまり、面積 = 0.5 × b ×

  2. C++で正方形の外接円の面積を求める方法

    本記事では、正方形の一辺の長さが与えられたときに、その正方形の外接円の面積を求める方法について解説します。まず、理解を深めるために基本的な定義をおさらいしましょう。 基本用語の定義 正方形:すべての辺の長さが等しい四角形のことです。 外接円:多角形のすべての頂点に接する円のことです。 面積:二次元図形の広がりの大きさを数量的に表したものです。 外接円の面積の求め方 正方形の外接円の面積を計算するには、円と正方形それぞれのパラメータの間にある関係を見つける必要があります。 下の図のように、正方形のすべての頂点が円に接しています。この図から読み取れる重要な性質は、正方形の対角線の長さが円の直径