// Polymorphism で基底クラス(抽象クラス)の、複数ある純粋仮想関数を
// 全てオーバーライド(overriding)してなくても OK か ?

#include <iostream>

using namespace std;

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

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


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

	void bar( ) {
		cout << "I'm Sub.bar( ) " << endl;
	}
};


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


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

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

	delete pB;
	delete pB2;

	return 0;
}


/*
	1. ダメです。だから本ソースはコンパイルエラーになります。
	             ==========================================
*/

// end of file