植物類(多態と継承)


//#include<iostream>
//#include<string>
//using namespace std;
//
//class Botany
//{
//public:
//	Botany(const string& name="")
//	:_name(name)
//	{
//		s_Count++;
//	}
//	Botany(const Botany& b)
//		:_name(b._name)
//	{
//		s_Count++;
//	}
//	Botany& operator=(const Botany& b)
//	{
//		if (this != &b)
//		{
//			_name = b._name;
//		}
//		return *this;
//	}
//	~Botany()
//	{
//		--s_Count;
//		cout << "~Botany()" << endl;
//	}
//	virtual void Display()
//	{
//		cout << "name"<<_name << endl;
//	}
//protected:
//	string _name;
//	static int s_Count;
//};
//int Botany::s_Count = 0;
//
//class  Tree:virtual public  Botany
//{
//public:
//	Tree(const string& s, int hight, int age)
//		:Botany(s)
//		, _hight(hight)
//		, _age(age)
//	{
//
//	}
//	Tree(Tree& t)
//		:Botany(t._name)
//		, _hight(t._hight)
//		, _age(t._age)
//	{
//
//	}
//	Tree& operator=(const Tree& t)
//	{
//		if (this != &t)
//		{
//			_name = t._name;
//			_hight = t._hight;
//			_age = t._age;
//		}
//		return *this;
//	}
//	~Tree()
//	{
//		cout << "~Tree()" << endl;
//	}
//	virtual void Display()
//	{
//		Botany::Display();
//		cout << "hight:" << _hight << endl;
//		cout << "age:" << _age << endl;
//	}
//protected:
//	int _hight;
//	int _age;
//
//};
//class Flower :virtual public Botany
//{
//public:
//	Flower(const string& name, const string& color)
//		:Botany(name)
//		, _color(color)
//	{
//
//	}
//	Flower(Flower& f)
//		:Botany(f._name)
//		, _color(f._color)
//	{
//
//	}
//	Flower& operator=(const Flower& f)
//	{
//		if (this != &f)
//		{
//			_name = f._name;
//			_color = f._color;
//		}
//		return *this;
//	}
//	~Flower()
//	{
//		cout << "~Flower()" << endl;
//	}
//	virtual void Display()
//	{
//		Botany::Display();
//		cout << "color" << _color << endl;
//	}
//protected:
//	string _color;
//};
//class MicheliaAlba:public Tree, public Flower
//{
//public:
//	MicheliaAlba(const string& name, int  hight, int age,const string& color,const string& kind)
//		:Botany(name)
//		,Tree(name, hight, age)
//		, Flower(name, color)
//		, _kind(kind)
//	{
//
//	}
//	MicheliaAlba(const MicheliaAlba& m)
//		:Botany(m._name)
//		, Tree(m._name, m._hight,m._age)
//		, Flower(m._name, m._color)
//		, _kind(m._kind)
//	{
//
//	}
//	MicheliaAlba& operator=(const MicheliaAlba& m)
//	{
//		if (this != &m)
//		{
//			_name = m._name;
//			_hight = m._hight;
//			_age = m._age;
//			_color = m._color;
//			_kind = m._kind;
//
//		}
//		return *this;
//	}
//	~MicheliaAlba()
//	{
//		cout << "~MicheliaAlba()" << endl;
//	}
//	virtual void Display()
//	{
//		Tree::Display();
//		Flower::Display();
//		cout << "kind" << _kind << endl;
//	}
//protected:
//	string _kind;
//};
//void Test1()
//{
//	MicheliaAlba m(" ",11,2," ", " ");
//	m.Display();
//
//	Botany b(" ");
//	b.Display();
//
//	Tree pine(" ", 15, 27);
//	pine.Display();
//
//	Flower f(" ", " ");
//	f.Display();
//
//
//}
//void Test2()
//{
//	Botany  b1(" ");
//	b1.Display();
//
//	MicheliaAlba m1(" ", 11, 2, " ", " ");
//	m1.Display();
//
//	MicheliaAlba m2(" ",13, 4, " ", " ");
//	m2.Display();
//
//	Botany* b = &b1;
//	b->Display();
//	
//	b=(Botany*)&m1;
//	b->Display();// 
//
//}
//void Test3()
//{
//	Botany  b1(" ");
//	b1.Display();
//
//	MicheliaAlba m1(" ", 11, 2, " ", " ");
//	m1.Display();
//
//	b1 = m1;
//	b1.Display();// : 
//}
//int main()
//{
//	Test3();
//	system("pause");
//	return 0;
//}
//