![]() |
#2
寒风中的细雨2012-11-24 13:15
![]() /*1.实验要求: 定义一个类Animal,该类中可以存放动物的名字,并有一个identify函数用于显示动物的种类。 定义两个类Cat和Dog,都继承自Animal,并重载identify函数,不但要显示动物的种类,还要显示动物的名字。 定义Tiger类,继承自Cat,重载identify函数,显示动物的种类和名字。 定义一个动物园类Zoo,管理动物,根据下面的提示编写动物类及相关函数。注意指针虚函数的用法。 class Zoo { public: Zoo(int max); ~Zoo(){ delete residents; } int Accept(Animal *a); //接收动物 void ListAnimals();//显示动物园所有的动物 private: int maxAnimals; //动物园能最多圈养的动物数 int numAnimals; //动物园当前圈养的动物数 Animal **residents;// 指向动物园圈养的动物对象的指针数组 }; */ #include<iostream> #include<string> using namespace std; class Animal { protected: string name; public: Animal(string n) {name=n;} virtual void identify() {} }; class Cat:public Animal { public: Cat(string n):Animal(n) {} void identify() { cout<<"猫:\t"<<"name"<<endl; } }; class Dog:public Animal { public: Dog(string n):Animal(n) {} void identify() { cout<<"狗:\t"<<"name"<<endl; } }; class Tiger:public Cat { public: Tiger(string n):Cat(n) {} void identify() { cout<<"老虎:\t"<<"name"<<endl; } }; class Zoo { public: Zoo(int max);//max为动物园能圈养的动物数 ~Zoo(){ delete residents; } int Accept(Animal *a);//接收动物 void ListAnimals();//显示动物园所有的动物 private: int maxAnimals; //动物园能最多圈养的动物数 static int numAnimals; //动物园当前圈养的动物数 Animal **residents; // 指向动物园圈养的动物对象的指针数组 }; int Zoo::numAnimals; Zoo::Zoo(int max) { maxAnimals=max; residents = new Animal*[maxAnimals]; } int Zoo::Accept(Animal *a) { if(numAnimals<maxAnimals) { cout<<"该动物被成功接收!"<<endl; residents[numAnimals] = a; numAnimals++; } else { cout<<"动物园已满,不能再接收!接收失败!"<<endl; return -1; } return 0; } void Zoo::ListAnimals(/*Cat &a, Dog &b, Tiger &c*/) { /* *residents[1]=&b; *residents[1]->identify(); *residents[2]=&c; *residents[2]->identify(); *residents[0]=&a; *residents[0]->identify();*/ for (int i = 0; i != numAnimals; ++i) { residents[i]->identify(); } } //static int numAnimals=0; int main() { Cat a("咪咪"); Dog b("汪汪"); Tiger c("小可爱"); Zoo d(4); d.Accept(&a); d.Accept(&b); d.Accept(&c); d.ListAnimals(/*a,b,c*/); return 0; } |
/*1.实验要求:
定义一个类Animal,该类中可以存放动物的名字,并有一个identify函数用于显示动物的种类。
定义两个类Cat和Dog,都继承自Animal,并重载identify函数,不但要显示动物的种类,还要显示动物的名字。
定义Tiger类,继承自Cat,重载identify函数,显示动物的种类和名字。
定义一个动物园类Zoo,管理动物,根据下面的提示编写动物类及相关函数。注意指针虚函数的用法。
class Zoo {
public:
Zoo(int max);
~Zoo(){ delete residents; }
int Accept(Animal *a); //接收动物
void ListAnimals();//显示动物园所有的动物
private:
int maxAnimals; //动物园能最多圈养的动物数
int numAnimals; //动物园当前圈养的动物数
Animal **residents;// 指向动物园圈养的动物对象的指针数组
}; */
#include<iostream>
#include<string>
using namespace std;
class Animal{
protected:
string name;
public:
Animal(string n)
{name=n;}
virtual void identify()
{}
};
class Cat:public Animal{
public:
Cat(string n):Animal(n)
{}
void identify()
{
cout<<"猫:\t"<<"name"<<endl;
}
};
class Dog:public Animal{
public:
Dog(string n):Animal(n)
{}
void identify()
{
cout<<"狗:\t"<<"name"<<endl;
}
};
class Tiger:public Cat{
public:
Tiger(string n):Cat(n)
{}
void identify()
{
cout<<"老虎:\t"<<"name"<<endl;
}
};
class Zoo
{
public:
Zoo(int max);//max为动物园能圈养的动物数
~Zoo(){ delete residents; }
int Accept(Animal *a);//接收动物
void ListAnimals();//显示动物园所有的动物
private:
int maxAnimals; //动物园能最多圈养的动物数
static int numAnimals; //动物园当前圈养的动物数
Animal **residents;
// 指向动物园圈养的动物对象的指针数组
};
Zoo::Zoo(int max)
{ maxAnimals=max;
}
int Zoo::Accept(Animal *a)
{
if(numAnimals<maxAnimals)
{ cout<<"该动物被成功接收!"<<endl;
numAnimals++;
}
else
cout<<"动物园已满,不能再接收!接收失败!"<<endl;
}
void Zoo::ListAnimals(Cat &a,Dog &b,Tiger &c)
{ *residents[1]=&b;
*residents[1]->identify();
*residents[2]=&c;
*residents[2]->identify();
*residents[0]=&a;
*residents[0]->identify();
}
static int numAnimals=0;
int main()
{
Cat a("咪咪");
Dog b("汪汪");
Tiger c("小可爱");
Zoo d(4);
d.Accept(&a);
d. Accept(&b);
d.Accept(&c);
d.ListAnimals(a,b,c);
return 0;
}