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

C++のデフォルトコンストラクタとは?基本からサンプルコードまで解説

コンストラクタとは

コンストラクタは、クラスの新しいオブジェクトが生成される際に自動的に実行される特殊なメンバ関数です。クラス名と同じ名前を持ち、戻り値の型を持ちません(voidも指定できません)。主な役割は、クラスのメンバ変数に初期値を設定することです。コンストラクタには大きく分けて「デフォルトコンストラクタ」と「引数付きコンストラクタ」の2種類があります。

デフォルトコンストラクタの特徴

デフォルトコンストラクタは、引数を一切取らないコンストラクタです。プログラマが明示的にデフォルトコンストラクタを定義しなかった場合、コンパイラが暗黙的にデフォルトコンストラクタを自動生成します。ただし、暗黙的に生成された場合、組み込み型のメンバ変数は初期化されず不定値となるため、意図した動作を保証するためにも必要に応じて明示的な定義を行うことが推奨されます。

サンプルプログラム

以下は、デフォルトコンストラクタの動作を示すサンプルプログラムです。

#include <iostream>
using namespace std;
class DemoDC {
    private:
    int num1, num2;
    public:
    DemoDC() {
        num1 = 10;
        num2 = 20;
    }
    void display() {
        cout<<"num1 = "<< num1 <<endl;
        cout<<"num2 = "<< num2 <<endl;
    }
};
int main() {
    DemoDC obj;
    obj.display();
    return 0;
}

出力結果

num1 = 10
num2 = 20

プログラムの解説

上記のプログラムでは、クラスDemoDC内にデフォルトコンストラクタが定義されており、num1とnum2がそれぞれ10と20で初期化されます。また、num1とnum2の値を出力するdisplay()関数も用意されています。該当するコード部分は以下の通りです。

class DemoDC {
    private:
    int num1, num2;
    public:
    DemoDC() {
        num1 = 10;
        num2 = 20;
    }
    void display() {
        cout<<"num1 = "<< num1 <<endl;
        cout<<"num2 = "<< num2 <<endl;
    }
};

main()関数では、クラスDemoDC型のオブジェクトを定義し、その後display()関数を呼び出しています。該当箇所は以下の通りです。

DemoDC obj;
obj.display();

このようにオブジェクトobjが生成された瞬間にデフォルトコンストラクタが呼び出され、メンバ変数が自動的に初期化されることが確認できます。

  1. C++のコンストラクタ内で仮想関数を呼び出すとどうなる?仕組みと注意点を解説

    コンストラクタやデストラクタの中から仮想関数を呼び出すのは危険な操作であり、可能な限り避けるべきです。その理由は、呼び出された仮想関数が派生クラスのものではなく、基底クラス(Base)のものとして実行されてしまうためです。 なぜ基底クラスの仮想関数が呼ばれるのか C++では、各クラスは自分自身の構築処理に入る前に、そのクラス専用の仮想メソッドテーブル(vtable)を先に構築します。この仕組みにより、コンストラクタ内で仮想メソッドを呼び出すと、現時点で有効になっているテーブル、つまり基底クラスの仮想メソッドが呼び出されることになります。 また、その階層に実装がまったく存在しない場合(純粋仮想関

  2. Linux向けC++開発に最適なIDEのおすすめ6選

    大規模なプロジェクトをテキストエディタだけで管理するのは容易ではありません。そうしたケースではIDE(統合開発環境)を活用することで、生産性が向上し、フラストレーションも大幅に軽減されるでしょう。IDEにはさまざまな種類があり、自分のニーズに合ったものを選ぶことが重要です。「Linux上のC++開発において唯一のベスト」と呼べるIDEは存在せず、賢くツールを見極める必要があります。ここでは、人気が高く、編集部のおすすめでもあるLinux向けIDEを紹介します。Linuxで使えるC++向けIDE おすすめ6選1. NetBeansNetBeansは、C/C++をはじめ多くのプログラミング言語に対