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に戻る