// 27_27-8.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'; }
};

void func_p(ClsA *pa)	// 基底クラスのポインタ仮引数を使う場合
{
	pa->disp();
}

void func_r(ClsA& ra)	// 基底クラスの参照仮引数を使う場合
{
	ra.disp();
}

int _tmain(int argc, _TCHAR* argv[])
{
	ClsA aa(10);
	ClsB bb(20, 30);

	// 基底クラスと派生クラスのポインタを渡す
	func_p(&aa);
	func_p(&bb);

	// 基底クラスと派生クラスの参照を渡す
	func_r(aa);
	func_r(bb);

	MessageBox(NULL, _T("Check Console Window"), L"MessageBox", MB_OK);

	return 0;
}

