// 27_27-9.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//

#include "stdafx.h"
#include <iostream>
#include <windows.h>
#include <cstring>

using namespace std;

// x,yを管理する基底クラス
class ClsXY {
protected:
	int x, y;
public:
	ClsXY(int n1 = 0, int n2 = 0) { x = n1; y = n2; }
	virtual void disp(int mode) = 0;	// virtualと=0で純粋仮想関数にする
};

// 三角形を管理するクラス
class Triangle : public ClsXY {
public:
	Triangle(int n1 = 0, int n2 = 0) : ClsXY(n1, n2) { ; }
	void disp(int mode);
};

void Triangle::disp(int mode)
{
	if (mode == 'A') {
		cout << "三角形 面積=" << x*y/2.0 << '\n';
	}
	if (mode == 'L') {
		cout << "三角形 底辺=" << x << " 高さ=" << y << '\n';
	}
}

// 四角形を管理するクラス
class Square : public ClsXY {
public:
	Square(int n1 = 0, int n2 = 0) : ClsXY(n1, n2) { ; }
	void disp(int mode);
};

void Square::disp(int mode)
{
	if (mode == 'A') {
		cout << "四角形 面積=" << x*y << '\n';
	}
	if (mode == 'L') {
		cout << "四角形 横=" << x << " 縦=" << y << '\n';
	}
}

int _tmain(int argc, _TCHAR* argv[])
{
	ClsXY *p;
	Triangle t(10, 20);
	Square s(10, 20);

	p = &t;
	p->disp('A');
	p->disp('L');

	p = &s;
	p->disp('A');
	p->disp('L');
	
	MessageBox(NULL, _T("Check Console Window"), L"MessageBox", MB_OK);

	return 0;
}

