// 抽象クラスはインスタンスを作れないのは分かっているが、
// ポインタは OK なのか。その確認。

#include <iostream>

using namespace std;

// 抽象クラス
class Basic
{
public:
	int	a;

	Basic( ) { a = 0; };
	virtual ~Basic( ) {};
	virtual void foo( ) = 0 ;		// 純粋仮想関数
};


// 派生クラス1
class Sub : public Basic
{
public:
	// overriding
	void foo( ) {
		cout << "I'm Sub" << endl;
	}
};


// 派生クラス2
class Sub2 : public Basic
{
public:
	// overriding
	void foo( ) {
		cout << "I'm Sub2" << endl;
	}
};



int
main( )
{
	// Polymorphism
	Basic *pB  = new Sub;
	Basic *pB2 = new Sub2;

	pB->foo( );
	pB2->foo( );

	delete pB;
	delete pB2;

	return 0;
}


/*
	OK です。こればできないと Polymorphism もあったものではありません。
*/


// end of file