问题及代码:
/*
*Copyright (c) 2015,烟台大学计算机学院
*All rights reserved.
*文件名称:text.cpp
*作者:徐健
*完成日期:2015年23日
*版本号:v1.0
*
*问题描述: 根据给出的main()函数和运行结果的提示,
设计出相关的各个类,注意观察运行结果,
提取出每个类中需要的数据成员,并匹配上需要的成员函数。
*输入描述: 无
*程序输出: 各个类的实现效果结果输出
*/
#include <iostream>
using namespace std;
#include<string>
class Animal
{
public :
//构造函数 Animal(string name):name(name){}
virtual void cry()
{
cout<<"不知哪种动物,让我如何学叫?"<<endl;
}
/*
改为抽象类
virtual void cry()=0;
*/
/*将名字设为基类成员
string name;
*/
};
class Mouse:public Animal
{
public :
Mouse(string name,string sex):name(name),sex(sex){}//将名字放在基类中时,派生类的构造函数应改为 Mouse(string name,string sex):Animal(name),sex(sex){}下同
void cry()
{
if(sex=="m")sex="男";
else sex="女";
cout<<"我叫"<<name<<"是一只"<<sex<<"老鼠,我的叫声是吱吱吱!"<<endl;
}
private :
string name;
string sex;
};
class Cat:public Animal
{
public :
Cat(string name):name(name){}
void cry()
{
cout<<"我叫"<<name<<"是一只猫,我的叫声是喵喵喵!"<<endl;
}
private :
string name;
};
class Dog:public Animal
{
public :
Dog(string name):name(name){}
void cry()
{
cout<<"我叫"<<name<<"是一只狗,我的叫声是:汪汪汪!"<<endl;
}
private :
string name;
};
class Giraffe:public Animal
{
public :
Giraffe(string name,char sex):name(name),sex(sex){}
void cry()
{
string s;
if(sex=='m')
{
s="男";
}
else
s="女";
cout<<"我叫"<<name<<"是"<<s<<"长颈鹿,我的脖子太长,发不出声音来"<<endl;
}
private :
string name;
char sex;
};
int main()
{
Animal *p;
p=new Animal();//将Animal设计为抽象类时,需要将此行删除,否则报错,抽象类不能直接创建对象,但可以定义指针和引用.
p->cry();//将Animal设计为抽象类时,需要将此行删除
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("Girl",'m');
p=&g1;
p->cry();
return 0;
}
运行结果: