// 28_28-2.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//

#include "stdafx.h"
#include <iostream>
#include <windows.h>

using namespace std;

// 基底クラス
class ClsA {
protected:
	int a;
public:
	ClsA(int n = 0) { a = n; }
	virtual void disp() { cout << "ClsA a=" << a << '\n'; }
};

// 派生クラス
class ClsB : public ClsA {
private:
	int b;
public:
	ClsB(int n1 = 0, int n2 = 0) : ClsA(n1) { b = n2; }
	void disp() { cout << "ClsB a=" << a << " b=" << b << '\n'; }
};

int _tmain(int argc, _TCHAR* argv[])
{
	ClsA *pa, aa(10);
	ClsB *pb, bb(20, 30);

	cout << "-----dynamic_cast: pa ← &bb\n";
	pa = dynamic_cast<ClsA*>(&bb);
	if (pa) {
		cout << "pa ← &bb は正常にキャストされた\n";
	}
	else {
		cout << "pa ← &bb のキャストはできない\n";
	}

	cout << "-----dynamic_cast: pb ← &aa \n";
	pb = dynamic_cast<ClsB*>(&aa);
	if (pb) {
		cout << "pb ← &aa は正常にキャストされた\n";
		pb->disp();
	}
	else {
		cout << "pb ← &aa のキャストはできない\n";
	}

	MessageBox(NULL, _T("Check Console Window"), L"MessageBox", MB_OK);

	return 0;
}

