本关任务:根据给出的基类Animal和main()函数。 1、根据给出的main()函数和运行结果的提示,设计出相关的各个类,注意观察运行结果,提取出每个类中需要的数据成员,并匹配上需要的成员函数。 2、显然,Animal设计为抽象类更合适,Animal不需要能够实例化,是专门作基类使用的。改造程序,使Animal设计为抽象类,这时main()函数中p = new Animal();将出错,将此行删除。 3、每一个Animal的派生类都有一个“名字”数据成员,这一共有的成员完全可以由基类提供改造上面的程序,将这一数据成员作为抽象类Animal数据成员被各派生类使用。 下面是给出的基类Animal和main()函数: class Animal { public: virtual void cry() { cout<<"不知哪种动物,让我如何学叫?"<<endl; } }; int main( ) { Animal *p; Animal a = Animal(); a.cry(); Mouse m1("Jerry",'m'); p=&m1; p->cry(); Mouse m2("Jemmy",'f'); p=&m2; p->cry(); Cat c1("Tom"); p=&c1; p->cry(); Dog d1("Droopy"); p=&d1; p->cry(); Giraffe g1("Gill",'m'); p=&g1; p->cry(); return 0; } 下面是程序的运行结果: 不知哪种动物,让我如何学叫? 我叫Jerry,是一只公老鼠,我的叫声是:吱吱吱! 我叫Jemmy,是一只母老鼠,我的叫声是:吱吱吱! 我叫Tom,是一只猫,我的叫声是:喵喵喵! 我叫Droopy,是一条狗,我的叫声是:汪汪汪! 我叫Gill,是公长颈鹿,我的脖子太长,发不出声音来!
时间: 2024-01-26 14:02:17 浏览: 26
根据给出的main()函数和运行结果,设计出以下各个类:
```cpp
#include<iostream>
using namespace std;
class Animal {
public:
virtual void cry() = 0; //声明为纯虚函数,Animal变为抽象类
protected:
string name;
};
class Mouse : public Animal {
public:
Mouse(string n, char s) { name = n; sex = s; }
void cry() { cout << "我叫" << name << ",是一只" << (sex == 'm' ? "公" : "母") << "老鼠,我的叫声是:吱吱吱!" << endl; }
private:
char sex;
};
class Cat : public Animal {
public:
Cat(string n) { name = n; }
void cry() { cout << "我叫" << name << ",是一只猫,我的叫声是:喵喵喵!" << endl; }
};
class Dog : public Animal {
public:
Dog(string n) { name = n; }
void cry() { cout << "我叫" << name << ",是一条狗,我的叫声是:汪汪汪!" << endl; }
};
class Giraffe : public Animal {
public:
Giraffe(string n, char s) { name = n; sex = s; }
void cry() { cout << "我叫" << name << ",是一只" << (sex == 'm' ? "公" : "母") << "长颈鹿,我的脖子太长,发不出声音来!" << endl; }
private:
char sex;
};
```
改造上面的程序,使Animal设计为抽象类:
```cpp
class Animal {
public:
virtual void cry() = 0; //声明为纯虚函数,Animal变为抽象类
protected:
string name;
};
```
将每个派生类中的“名字”数据成员改为Animal的数据成员:
```cpp
protected:
string name;
```
在main()函数中,将p = new Animal();删除即可。
完整代码如下:
```cpp
#include<iostream>
using namespace std;
class Animal {
public:
virtual void cry() = 0; //声明为纯虚函数,Animal变为抽象类
protected:
string name;
};
class Mouse : public Animal {
public:
Mouse(string n, char s) { name = n; sex = s; }
void cry() { cout << "我叫" << name << ",是一只" << (sex == 'm' ? "公" : "母") << "老鼠,我的叫声是:吱吱吱!" << endl; }
private:
char sex;
};
class Cat : public Animal {
public:
Cat(string n) { name = n; }
void cry() { cout << "我叫" << name << ",是一只猫,我的叫声是:喵喵喵!" << endl; }
};
class Dog : public Animal {
public:
Dog(string n) { name = n; }
void cry() { cout << "我叫" << name << ",是一条狗,我的叫声是:汪汪汪!" << endl; }
};
class Giraffe : public Animal {
public:
Giraffe(string n, char s) { name = n; sex = s; }
void cry() { cout << "我叫" << name << ",是一只" << (sex == 'm' ? "公" : "母") << "长颈鹿,我的脖子太长,发不出声音来!" << endl; }
private:
char sex;
};
int main( ) {
Animal *p;
Mouse m1("Jerry",'m');
p=&m1;
p->cry();
Mouse m2("Jemmy",'f');
p=&m2;
p->cry();
Cat c1("Tom");
p=&c1;
p->cry();
Dog d1("Droopy");
p=&d1;
p->cry();
Giraffe g1("Gill",'m');
p=&g1;
p->cry();
return 0;
}
```