动物运动会.cpp

来自「设计模式:工厂模式、单例模式的基本实现」· C++ 代码 · 共 142 行

CPP
142
字号
#include <string>
#include <iostream>
using namespace std;

class Animal
{
protected:
	string name;
	int shoutNum;
	virtual string getShoutSound()=0;
public:
	Animal(string name)
	{
		this->name = name;
		shoutNum = 3;
	}
	Animal()
	{
		name = "无名";
		shoutNum = 3;
	}
	void setName(string name)
	{
		this->name = name;
	}
	void setShoutNum(int shoutNum)
	{
		this->shoutNum = shoutNum;
	}
	void Shout()
	{
		string shout;
		for(int i=0; i<shoutNum; i++)
		{
			shout += getShoutSound();
		}

		cout << "我叫" << name << shout << endl;
	}
};



class Cat: public Animal
{
public:
	Cat(string name): Animal(name)
	{
	}
	Cat(): Animal()
	{
	}
protected:
	string getShoutSound()
	{
		return " 喵";
	}
};

class Monkey: public Animal
{
public:
	Monkey(string name): Animal(name)
	{
	}
	Monkey(): Animal()
	{
	}
protected:
	string getShoutSound()
	{
		return " 吱";
	}
};

class IChangeThing
{
public:
	virtual void ChangeThing(string thing)=0;
	virtual ~IChangeThing(){}
};


class MachineCat: public Cat, public IChangeThing
{
public:
	MachineCat(): Cat()
	{
	
	}
	MachineCat(string name): Cat(name)
	{}
	void ChangeThing( string thing )
	{
		Shout();
		cout << " 我会使用口袋变东西, 变出" << thing << endl;
	}
};


class StoneMonkey: public Monkey, public IChangeThing
{
public:
	StoneMonkey(): Monkey()
	{}
	StoneMonkey(string name): Monkey(name)
	{}
	void ChangeThing( string thing )
	{
		Shout();
		cout << " 我会使用猴毛变东西, 变出" << thing << endl;
	}
};




int main()
{
	IChangeThing *array[2];

	array[0] = new MachineCat("叮当");
	array[1] = new StoneMonkey("孙悟空");
	
	array[0]->ChangeThing("任意门");
	array[1]->ChangeThing("牛魔王");

	delete array[0];
	delete array[1];


//	MachineCat *mcat = new MachineCat("叮当");

//	StoneMonkey *smonkey = new StoneMonkey("孙悟空");


//	mcat->ChangeThing("任意门");
//	smonkey->ChangeThing("牛魔王");


	return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?