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

【C++入門】変換コンストラクターとは?仕組みと使い方をわかりやすく解説

本記事では、C++のクラスにおける変換コンストラクター(Conversion Constructor)について詳しく解説します。

コンストラクターとは

コンストラクターは、クラスに属する特別なメンバー関数の一種です。主に以下のような特徴を持っています。

  • クラス名と同じ名前を持つ
  • 戻り値を返さない
  • オブジェクト生成時に自動的に呼び出される

コンストラクターは、クラスのオブジェクトを構築・初期化するために使われます。引数を受け取る形式もあれば、引数なしのデフォルトコンストラクターもあります。

変換コンストラクターとは

引数を1つだけ受け取るコンストラクターは「変換コンストラクター」と呼ばれます。

この種類のコンストラクターが定義されていると、引数の型からそのクラス型への暗黙の型変換が自動的に行われるようになります。つまり、整数などの別の型の値をオブジェクトに直接代入すると、コンパイラーが自動的に変換コンストラクターを呼び出してくれるのです。

サンプルコード

#include<iostream>
using namespace std;
class my_class {
    private:
        int my_var;
    public:
        my_class(int x) {
            this->my_var = x; // 引数付きコンストラクターでmy_varに値を設定
        }
        void display() {
            cout << "my_var の値: " << my_var << endl;
        }
};
int main() {
    my_class my_obj(10);
    my_obj.display();
    my_obj = 50; // ここで変換コンストラクターが呼び出される
    my_obj.display();
}

実行結果

my_var の値: 10
my_var の値: 50

コードの解説

まず、my_class型のオブジェクト my_obj を、引数 10 を渡して生成しています。この時点では通常の引数付きコンストラクターが呼び出され、my_var には 10 が格納されます。

次の行では、my_obj = 50; という代入を行っています。my_obj の型は my_class であるにもかかわらず、整数リテラルを直接代入できる点に注目してください。

これが可能になっているのは、引数を1つだけ持つ変換コンストラクターが定義されているためです。コンパイラーは内部で my_class(50) という一時オブジェクトを自動的に生成し、それを my_obj に代入します。その結果、my_var の値は 50 に更新されます。

注意点:explicitキーワードで暗黙の変換を防止する

このような暗黙の型変換は便利な一方で、意図しない動作やバグの原因になることもあります。暗黙の変換を禁止したい場合は、コンストラクターに explicit キーワードを付けることで、明示的な呼び出しのみ許可できます。

explicit my_class(int x) {
    this->my_var = x;
}

explicit を付与すると、my_obj = 50; のような記述はコンパイルエラーとなり、my_class obj(50); のように明示的にオブジェクトを生成する必要があります。

まとめ

  • 変換コンストラクターとは、引数を1つだけ受け取るコンストラクターのこと
  • 引数の型からクラス型への自動的な暗黙の型変換を可能にする
  • explicit キーワードを使えば、意図しない暗黙の変換を防止できる
  1. フリップフロップの種類と相互変換の方法を徹底解説

    フリップフロップ(flip-flop)は、順序論理回路の基本要素となるデジタル回路です。フリップフロップにはいくつかの種類があり、本記事では代表的な4種類の特徴と動作、さらに「あるフリップフロップから別のフリップフロップへ変換する」ための具体的な手順を解説します。フリップフロップには主に以下の4種類があります。SRフリップフロップDフリップフロップJKフリップフロップTフリップフロップSRフリップフロップとはSRフリップフロップは、クロック信号の立ち上がりエッジまたは立ち下がりエッジでのみ動作します。一方、SRラッチはイネーブル信号によって動作する点が異なります。SRフリップフロップの回路図を

  2. C++で2進数を10進数に変換するプログラムの作り方

    2進数が入力として与えられたとき、その2進数を10進数へ変換するのが本記事のテーマです。 コンピュータにおける10進数は基数10で表現されます。一方、2進数は基数2で表現され、使用するのは0と1という2つの数字だけです。それに対して10進数では、0から9までの任意の数字を扱うことができます。 2進数を10進数に変換するには、右端の桁から順に各桁の数字を取り出し、2のべき乗(0乗から始まり、桁数-1乗まで1ずつ増加)を掛け合わせます。そして、その掛け算の結果をすべて足し合わせることで、最終的な10進数の値が求まります。 以下は、2進数を10進数に変換する流れを図で表したものです。 具体例 入