static
VB 使いが C++ で違和感を感じるもののひとつが static
かも知れないな。たとえば関数スコープの変数を、static
/Static
で加算していくこんなクラス
' VB ' CIncriment Option Explicit Public Function Incriment() As Long Static slngNumber As Long slngNumber = slngNumber + 1 Incriment = slngNumber End Function
// C++ // CIncriment class CIncriment { public: int Incriment () { static int siNumber = 0; return ++siNumber; } };
これで、だいたい一緒かな?これを、インスタンスを作成しては、Incriment
メソッドをコールしてみる。
まず VB 。フォームモジュールにコマンドボタンを一個。
Option Explicit Private Sub Command1_Click() Dim oObject As CIncriment Set oObject = New CIncriment Call MsgBox(Format$(oObject.Incriment(), """Return ""0")) End Sub
ボタンをクリックするたびに、表示されるのは"Return 1"。クリックするたびにインスタンスが作成されて、インスタンスを作成する都度 slngNumber
は初期化されるからだ。
次は C++ 。q以外のキーをクリックすると、結果を表示する。
#include <conio.h> #include <iostream> using namespace std; int main(int argc, char* argv[]) { while ( 'q' != _getch() ) { CIncriment inc; cout << inc.Incriment() << endl; } return 0; }
・・・ほんとにインクリメントされている!最初はこれが納得いかなかった。C++はインスタンスごとにメソッドメンバが存在するわけではないので、static
変数は一つしかないのだ。気付くのに時間がかかった。static
の意味が違うってことかな。
トラックバック
- このエントリーにトラックバック:
- http://frog.raindrop.jp/cgi-bin/mt/mt-tb.cgi/355
コメント