// 24_24-6.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//

#include "stdafx.h"
#include <iostream>
#include <windows.h>
#include <string>

using namespace std;

class OUTcls {
public:
	int out_mbr;
	enum { enum_mbr = 10 };
	static const int cnst_mbr = 20;
	static int sttc_mbr;

	class INcls {
	public:
		int in_mbr;
		INcls(int n = 0) {
			in_mbr = n;
		}
		void in_disp() {
			cout << "in: in_mbr=" << in_mbr << '\n';
			cout << "in: enum_mbr=" << enum_mbr << '\n';
			cout << "in: cnst_mbr=" << cnst_mbr << '\n';
			cout << "in: sttc_mbr=" << sttc_mbr << '\n';
			//cout << "in: out_mbr=" << out_mbr << '\n';	// 記述できない
		}
	};
	INcls incls;	// INcls型のオブジェクト宣言

	OUTcls(int outdt, int indt) {
		out_mbr = outdt;
		incls = INcls(indt);
	}
	void out_disp() {
		cout << "out: out_mbr=" << out_mbr << '\n';
		cout << "out: enum_mbr=" << enum_mbr << '\n';
		cout << "out: cnst_mbr=" << cnst_mbr << '\n';
		cout << "out: sttc_mbr=" << sttc_mbr << '\n';
		cout << "out: incls.in_mbr=" << incls.in_mbr << '\n';
		//cout << "out: in_mbr=" << in_mbr << '\n';	// 記述できない
		incls.in_disp();	// 内部クラスのメンバ関数を呼ぶ
	}
};

int OUTcls::sttc_mbr = 30;	// staticメンバの設定
			

int _tmain(int argc, _TCHAR* argv[])
{
	OUTcls a(100, 200);

	cout << "----(1)out_disp()で表示" << '\n';
	a.out_disp();
	cout << "----(2)in_disp()で表示" << '\n';
	a.incls.in_disp();
	cout << "----(3)メンバを変更して表示" << '\n';
	a.out_mbr = 800;
	a.incls.in_mbr = 900;
	a.out_disp();

	MessageBox(NULL, _T("Check Console Window"), L"MessageBox", MB_OK);

	return 0;
}

