第38講 データベースソフト(住所録)の制作=並列処理の練習☆☆
第5話 stdafx.hのコード解説
第5話では、
stdafx.hコード
// stdafx.h : 標準のシステム インクルード ファイルのインクルード ファイル、または
// 参照回数が多く、かつあまり変更されない、プロジェクト専用のインクルード ファイル
// を記述します。
#pragma once
#include<string>
#include<msclr/marshal.h>
#include<msclr/marshal_cppstd.h>
#include<string>
using namespace std;
static string u[1000][100];
static int n,m=0;
// TODO: プログラムに必要な追加ヘッダーをここで参照してください。
について解説します。
stdafx.hにおくグローバル変数(各Formから共有される変数)はすべてstatic変数でなければなりません。
static変数とは、静的変数で普通の動的変数(staticがつかない変数)が関数の生成消滅とともに生成消滅を繰り返すのに対して、
static変数は、ソフトが起動している間はずっとメモリーに常駐しています。
つまり、ソフトが起動中は生成消滅は繰り返さずずっと生きているわけです。
ただし、ソフトが終了すると、やはり消滅の運命を免れません。
ですから、後にメニューバーにファイルを設けて『名前を付けて保存』などの機能を搭載する必要があるのです。
各Formから共有される変数は、当然メモリーに常駐する静的変数でなければなりません。
関数が起動中だけメモリーにある動的変数では、各Formから共有できないのは当然の道理ですよね。
static string u[1000][100];
uを2次元の配列に変更した理由は、1000人分のデータを保存できるようにしたからです。
前の1次元配列では、一人のデータしか保存できません。
2次元目の要素数[100]はもっと小さくてもよいですね。
実際に使っているのは、Form1.hを見ていただければお分かりのように
dataGridView1[17,i]->Value=marshal_as<String^>(u[i][16]);
最大で16ですから、[16]でもよいわけです。
大きめにとったのは、
ソフトを作り始めの段階では、データ数の見当がつかなかったからです。
作っている内に、これも必要だ、あれも必要だとなりますよね。
私が参照したソフトは一太郎の住所録です。
この住所録は、項目は2,3倍はありました。
印刷1とか、部署名とか、役職名などです。
しかし、項目が多すぎると初心者向けの講義の題材としては適さなくなるので、
項目を半分以下にしたわけです。
static int n,m=0;
静的整数型変数を2つ用意しています。
mが重要な働きをします。
nはデータ番号です。
textBox15に表示される番号であり、
一覧表の番号に表示されるものです。
nは、ソフト使用者が各ボタン
をクリックする度に姿を変えます。
を押すと、n++;と1つ大きくなります。
をクリックすると、n--;と1つ小さくなります。
つまり、常に変動しているわけです。
普通はまとめてデータを入力していきますから、
一覧表に表示されているデータ数よりnはかなり大きくなっています。
Form1のデータ取得ボタンを押すと、現時点のデータがすべて表示されるようになっているわけですが、
mがないとどこまで表示をさせればよいかわかりません。
要するにnは住所録使用者が、データを加えたり、データを修正する度に増減を繰り返すわけですが、
その時の最大値がmという訳です。
VC++講義第1部へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual
Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)