// 25_25-14.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//

#include "stdafx.h"
#include <iostream>
#include <windows.h>

using namespace std;

// -----基底クラス-----
class Base {
private:
	enum { emb = 100 };	// 列挙体の例
	static int smb;		// 静的メンバ
	int imb;			// 通常メンバ
	friend class ClsA;	// ClsAをフレンドクラスに設定
	friend class ClsB;	// ClsBをフレンドクラスに設定
	friend class ClsC;	// ClsCをフレンドクラスに設定
};
int Base::smb = 200;	// 静的メンバの初期化

// Baseのメンバを直接参照する
class ClsA {
private:
	int aa;
public:
	ClsA(int n) { aa = n; }
	void disp() {
		cout << "emb=" << Base::emb << " smb=" << Base::smb
			 << " aa=" << aa << '\n';
	}
};

// Baseを継承する
class ClsB : public Base {
private:
	int bb;
public:
	ClsB(int n1, int n2) { bb = n1; imb = n2; }
	void disp() {
		cout << "emb=" << emb << " smb=" << smb
			 << " bb=" << bb << " imb=" << imb << '\n';
	}		
};

// Baseを自分のメンバにする(入れ子のクラス)
class ClsC {
private:
	int cc;
	Base bs;
public:
	ClsC(int n1, int n2) { cc = n1; bs.imb = n2; }
	void disp() {
		cout << "emb=" << bs.emb << " smb=" << bs.smb
			<< " cc=" << cc << " imb=" << bs.imb << '\n';
	}
};


int _tmain(int argc, _TCHAR* argv[])
{
	ClsA a(50);
	ClsB b(60, 65);
	ClsC c(70, 75);
	a.disp();
	b.disp();
	c.disp();

	MessageBox(NULL, _T("Check Console Window"), L"MessageBox", MB_OK);

	return 0;
}

