C++の仮想コンストラクタ
仮想メカニズムは、派生クラスオブジェクトへの基本クラスポインタがある場合にのみ機能します。
C ++では、コンストラクターを仮想にすることはできません。これは、クラスのコンストラクターが実行されるときに、メモリー内に仮想テーブルがないため、仮想ポインターがまだ定義されていないことを意味します。したがって、コンストラクターは常に非仮想である必要があります。
ただし、仮想デストラクタは可能です。
サンプルコード
#include<iostream>
using namespace std;
class b {
public:
b() {
cout<<"Constructing base \n";
}
virtual ~b() {
cout<<"Destructing base \n";
}
};
class d: public b {
public:
d() {
cout<<"Constructing derived \n";
}
~d() {
cout<<"Destructing derived \n";
}
};
int main(void) {
d *derived = new d();
b *bptr = derived;
delete bptr;
return 0;
} 出力
Constructing base Constructing derived Destructing derived Destructing base
-
C++のデフォルトコンストラクタ
クラスコンストラクターは、クラスの新しいオブジェクトを作成するたびに実行されるクラスの特別なメンバー関数です。 コンストラクターはクラスとまったく同じ名前になり、return型はまったくなく、voidでさえありません。コンストラクターは、特定のメンバー変数の初期値を設定するのに非常に役立ちます。 次の例では、コンストラクターの概念を説明しています- 例 #include <iostream> using namespace std; class Line { public: void setLength( do
-
C++でコンストラクタをコピーする
コピーコンストラクターはコンストラクターの一種です。オブジェクトを作成し、同じクラスのオブジェクトで初期化します。コピーコンストラクターがクラスで定義されていない場合は、コンパイラー自体が定義します。コピーコンストラクタは、ポインタ変数または動的メモリ割り当てを持つクラスの必須事項です。 コピーコンストラクタを示すプログラムは次のとおりです。 例 #include<iostream> using namespace std; class Demo { private: int num1, num2; p