//純粋仮想関数を持っている抽象クラス class Hand { public: virtual void Check(Hand *) = 0; //相手に問い合わせる virtual void GuNiKachi() = 0; //グーに勝てるかどうかを返す virtual void ChokiNiKachi() = 0; //チョキに勝てるかどうかを返す virtual void PaNiKachi() = 0; //パーに勝てるかどうかを返す }; |
class Gu : public Hand { public: void Check(Hand * h) { h->GuNiKachi(); } void GuNiKachi() { cout << "あいこです!\n"; } void ChokiNiKachi() { cout << "グーの勝ちです!\n"; } void PaNiKachi() { cout << "グーの負けです!\n"; } }; |
class Choki : public Hand { public: void Check(Hand * h) { h->ChokiNiKachi(); } void GuNiKachi() { cout << "チョキの負けです!\n"; } void ChokiNiKachi() { cout << "あいこです!\n"; } void PaNiKachi() { cout << "チョキの勝ちです!\n"; } }; |
class Pa : public Hand { public: void Check(Hand * h) { h->PaNiKachi(); } void GuNiKachi() { cout << "パーの勝ちです!\n"; } void ChokiNiKachi() { cout << "パーの負けです!\n"; } void PaNiKachi() { cout << "あいこです!\n"; } }; |
int main() { Gu g; Choki c; Pa p; //グーとチョキの対戦 cout << "グー vs. チョキ・・・"; c.Check(&g); //グーとパーの対戦 cout << "グー vs. パー・・・"; p.Check(&g); //グーとグーの対戦 cout << "グー vs. グー・・・"; g.Check(&g); return 0; } |