コンストラクタ

  クラスの標準的な最低要素



  
// *********************************************************
// クラス定義
// *********************************************************
class LboxWin
{
public:
	LboxWin();
	virtual ~LboxWin();

};

// *********************************************************
// コンストラクタ
// *********************************************************
LboxWin::LboxWin()
{

}

// *********************************************************
// デストラクタ
// *********************************************************
LboxWin::~LboxWin()
{

}
  

上記は 「なにもしない」 クラスです。しかし、クラスとしての最低限の要素を備えています

このクラスの実体をメモリ上に 「動的」 に作成するには以下のように記述します

LboxWin *Win = new LboxWin();

これは、LboxWin 型のポインタ変数を定義して、初期値として LboxWin オブジェクトをセットしています
ここで、LboxWin() は、コンストラクタであり、オブジェクトの実体を作成しています。このオブジェクトは
「動的」 にメモリ上に作成されており、必要なくなれば以下のようにして解放します

delete Win;

コンストラクタは、new で作成された時に呼び出され、デストラクタは delete された時に呼び出されます
もし、delete Win; を実行しなければ、デストラクタが呼び出される事はありません

この記述は、関数プロックの外に関数宣言やグローバル変数の定義と同じ場所に記述できます
また、グローバル変数として LboxWin *Win = NULL; と定義しておいて、関数ブロック内で以下のようにして作成
する事もできます

  
if ( Win == NULL ) {
	Win = new LboxWin();
}
  

以下削除
  
if ( Win != NULL ) {
	delete Win;
}
  



  アブリケーション内の固定メモリにオブジェクトを作成



クラスをメモリ上に 「静的」 に作成するには以下のように記述します

LboxWin Win;

これは、LboxWin 型の変数を定義して、 LboxWin オブジェクトを同時に作成する事を意味します
このオブジェクトは「固定メモリ上」に作成されており、定義位置がグローバルであれば、プログラムが
終了するまで破棄される事はありません。関数プロック内であれば、関数から制御が他へ移った時点で
破棄されます

デストラクタは破棄される時に自動的に呼び出されます

オブジェクトを動的に作成するか、静的に作成するかはそのオブジェクトが使用される環境によって
判断します。クラスによっては、パラメータ付のコンストラクタが拡張機能用で実装されており、動的
でしか利用しにくい場合もあります

例えば、モーダルダイアログに依存するオブジェクトであれば、ダイアログは一時的なものなので
動的なオブジェクトが都合が良いと思われます。しかし、文字列オブジェクトのようにブロック内で
一時的に使用するものでも、動的に作成してしまうと後で解放するのが面倒になりますので、静的
に作成して自動的に解放させるほうが「解放忘れ」を避ける事ができます




  メンバの参照

  
// *********************************************************
// クラス定義
// *********************************************************
class LboxWin
{
public:
	void MsgOk( LPCTSTR lpText );
	HWND hWnd;
	LboxWin( HWND hTarget );
	LboxWin();
	virtual ~LboxWin();

};

// *********************************************************
// コンストラクタ
// *********************************************************
LboxWin::LboxWin()
{
	LboxWin::hWnd = NULL;
}

// *********************************************************
// コンストラクタ2
// *********************************************************
LboxWin::LboxWin( HWND hTarget )
{
	LboxWin::hWnd = hTarget;
}

// *********************************************************
// デストラクタ
// *********************************************************
LboxWin::~LboxWin()
{

}

// *********************************************************
// メンバ関数
// *********************************************************
void LboxWin::MsgOk( LPCTSTR lpText )
{
	MessageBox( LboxWin::hWnd, lpText, "確認", MB_OK );
	MessageBox( this->hWnd, lpText, "確認", MB_OK );
	MessageBox( hWnd, lpText, "確認", MB_OK );
}
  










  infoboard   管理者用   
このエントリーをはてなブックマークに追加





フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ