注册 登录
编程论坛 C++教室

大家好!我变这个程序时,不知道如何用指向对象的指针数组。请帮忙改下啊!

wuxia111111 发布于 2012-11-24 00:14, 457 次点击
/*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;
}

  
5 回复
#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;
}
#3
wuxia1111112012-11-24 21:27
回复 2楼 寒风中的细雨
谢谢啦!
#4
wuxia1111112012-11-25 13:13
回复 3楼 wuxia111111
嗯!我好好看了一下!明白啦!谢谢啦!
#5
mmmmmmmmmmmm2012-11-26 09:57
学习了 刚刚看了下  


继承类里面的
程序代码:
void identify()
    {
        cout<<"狗:\t"<<"name"<<endl;
    }


name那里多了引号哈
#6
wuxia1111112012-11-28 23:56
回复 5楼 mmmmmmmmmmmm
嗯。我那写错了,不应该加""的。
1