0から始めるVisualStudio2022:ソフト開発塾
おまけ その2
変数を宣言する時、
const とか static とか、あるよね
これについて
サンプルプログラムは
int smp01(int mp_xx) {
int mm_yy = 0;
mm_yy++;
return (mm_yy + mp_xx);
}
int smp02(int mp_xx) {
static int mm_yy = 0;
mm_yy++;
return (mm_yy + mp_xx);
}
int smp03(int mp_xx) {
const int mm_yy=0;
//mm_yy++;
return (mm_yy + mp_xx);
}
int main() {
for (int i = 0; i < 30; i += 5) {
printf("i=[%d] smp01=[%d] smp02=[%d] smp03=[%d]\n", i,smp01(i), smp02(i), smp03(i));
}
return 0;
}
です。smp03で、mm_yy++が、コメントになっているのは、コンパイルエラーが発生するためです。
実行結果は
i=[0] smp01=[1] smp02=[1] smp03=[0]
i=[5] smp01=[6] smp02=[7] smp03=[5]
i=[10] smp01=[11] smp02=[13] smp03=[10]
i=[15] smp01=[16] smp02=[19] smp03=[15]
i=[20] smp01=[21] smp02=[25] smp03=[20]
i=[25] smp01=[26] smp02=[31] smp03=[25]
ですね。
これが、クラスになればどうなるか?
class smp {
public:
int m_smp11 = 11011;
static int m_smp12;
const int m_smp13 = 13013;
int smp01(int);
int smp02(int);
int smp03(int);
int get_smp14() { return m_smp14; };
protected:
int m_smp14 = 14014;
};
int smp::smp01(int mp_xx) {
int mm_yy = 0;
mm_yy++;
m_smp11++;
return (mm_yy + mp_xx);
}
int smp::smp02(int mp_xx) {
static int mm_yy = 0;
mm_yy++;
m_smp12++;
return (mm_yy + mp_xx);
}
int smp::smp03(int mp_xx) {
const int mm_yy = 0;
//mm_yy++;
//m_smp13++;
m_smp14++;
return (mm_yy + mp_xx);
}
int smp::m_smp12;
int main() {
smp mm_data;
for (int i = 0; i < 30; i += 5) {
printf("i=[%d] smp01=[%d] smp02=[%d] smp03=[%d] m_smp11=[%d] m_smp12=[%d] m_smp13=[%d] get_smp14=[%d]\n", i,
mm_data.smp01(i), mm_data.smp02(i), mm_data.smp03(i),
mm_data.m_smp11, mm_data.m_smp12, mm_data.m_smp13,
mm_data.get_smp14());
}
smp mm_dat1;
for (int i = 0; i < 30; i += 5) {
printf("i=[%d] smp01=[%d] smp02=[%d] smp03=[%d] m_smp11=[%d] m_smp12=[%d] m_smp13=[%d] get_smp14=[%d]\n", i,
mm_dat1.smp01(i), mm_dat1.smp02(i), mm_dat1.smp03(i),
mm_dat1.m_smp11 , mm_dat1.m_smp12 , mm_dat1.m_smp13,
mm_dat1.get_smp14());
}
smp *mm_ptr;
mm_ptr = new smp;
for (int i = 0; i < 30; i += 5) {
printf("i=[%d] smp01=[%d] smp02=[%d] smp03=[%d] m_smp11=[%d] m_smp12=[%d] m_smp13=[%d] get_smp14=[%d]\n", i,
mm_ptr->smp01(i), mm_ptr->smp02(i), mm_ptr->smp03(i),
mm_ptr->m_smp11 , mm_ptr->m_smp12 , mm_ptr->m_smp13,
mm_ptr->get_smp14());
}
smp::m_smp12=5000;
mm_ptr = new smp;
for (int i = 0; i < 30; i += 5) {
printf("i=[%d] smp01=[%d] smp02=[%d] smp03=[%d] m_smp11=[%d] m_smp12=[%d] m_smp13=[%d] get_smp14=[%d]\n", i,
mm_ptr->smp01(i), mm_ptr->smp02(i), mm_ptr->smp03(i),
mm_ptr->m_smp11, mm_ptr->m_smp12, mm_ptr->m_smp13,
mm_ptr->get_smp14());
}
return 0;
}
staticにするには、main()の上の様に
int smp::m_smp12;
を、記述する必要があるようだ。
記述しないと、リンクでエラーにある。
プログラムを実行した結果が↓である。
i=[0] smp01=[1] smp02=[1] smp03=[0] m_smp11=[11012] m_smp12=[1] m_smp13=[13013] get_smp14=[14014]
i=[5] smp01=[6] smp02=[7] smp03=[5] m_smp11=[11013] m_smp12=[2] m_smp13=[13013] get_smp14=[14015]
i=[10] smp01=[11] smp02=[13] smp03=[10] m_smp11=[11014] m_smp12=[3] m_smp13=[13013] get_smp14=[14016]
i=[15] smp01=[16] smp02=[19] smp03=[15] m_smp11=[11015] m_smp12=[4] m_smp13=[13013] get_smp14=[14017]
i=[20] smp01=[21] smp02=[25] smp03=[20] m_smp11=[11016] m_smp12=[5] m_smp13=[13013] get_smp14=[14018]
i=[25] smp01=[26] smp02=[31] smp03=[25] m_smp11=[11017] m_smp12=[6] m_smp13=[13013] get_smp14=[14019]
i=[0] smp01=[1] smp02=[7] smp03=[0] m_smp11=[11012] m_smp12=[7] m_smp13=[13013] get_smp14=[14014]
i=[5] smp01=[6] smp02=[13] smp03=[5] m_smp11=[11013] m_smp12=[8] m_smp13=[13013] get_smp14=[14015]
i=[10] smp01=[11] smp02=[19] smp03=[10] m_smp11=[11014] m_smp12=[9] m_smp13=[13013] get_smp14=[14016]
i=[15] smp01=[16] smp02=[25] smp03=[15] m_smp11=[11015] m_smp12=[10] m_smp13=[13013] get_smp14=[14017]
i=[20] smp01=[21] smp02=[31] smp03=[20] m_smp11=[11016] m_smp12=[11] m_smp13=[13013] get_smp14=[14018]
i=[25] smp01=[26] smp02=[37] smp03=[25] m_smp11=[11017] m_smp12=[12] m_smp13=[13013] get_smp14=[14019]
i=[0] smp01=[1] smp02=[13] smp03=[0] m_smp11=[11012] m_smp12=[13] m_smp13=[13013] get_smp14=[14014]
i=[5] smp01=[6] smp02=[19] smp03=[5] m_smp11=[11013] m_smp12=[14] m_smp13=[13013] get_smp14=[14015]
i=[10] smp01=[11] smp02=[25] smp03=[10] m_smp11=[11014] m_smp12=[15] m_smp13=[13013] get_smp14=[14016]
i=[15] smp01=[16] smp02=[31] smp03=[15] m_smp11=[11015] m_smp12=[16] m_smp13=[13013] get_smp14=[14017]
i=[20] smp01=[21] smp02=[37] smp03=[20] m_smp11=[11016] m_smp12=[17] m_smp13=[13013] get_smp14=[14018]
i=[25] smp01=[26] smp02=[43] smp03=[25] m_smp11=[11017] m_smp12=[18] m_smp13=[13013] get_smp14=[14019]
i=[0] smp01=[1] smp02=[19] smp03=[0] m_smp11=[11012] m_smp12=[5001] m_smp13=[13013] get_smp14=[14014]
i=[5] smp01=[6] smp02=[25] smp03=[5] m_smp11=[11013] m_smp12=[5002] m_smp13=[13013] get_smp14=[14015]
i=[10] smp01=[11] smp02=[31] smp03=[10] m_smp11=[11014] m_smp12=[5003] m_smp13=[13013] get_smp14=[14016]
i=[15] smp01=[16] smp02=[37] smp03=[15] m_smp11=[11015] m_smp12=[5004] m_smp13=[13013] get_smp14=[14017]
i=[20] smp01=[21] smp02=[43] smp03=[20] m_smp11=[11016] m_smp12=[5005] m_smp13=[13013] get_smp14=[14018]
i=[25] smp01=[26] smp02=[49] smp03=[25] m_smp11=[11017] m_smp12=[5006] m_smp13=[13013] get_smp14=[14019]
Top 0070に戻る