c++的多态性编程.doc
文本预览下载声明
C++实验
一:实验目的和要求
了解多态性在C++中的体现;
掌握虚函数的使用;
了解抽象类。
二:题目内容
定义一个基类为哺乳动物类mammal,其中有数据成员年龄、重量、品种,有成员函数move()、speak()等,以此表示动物的行为。由这个基类派生出狗、猫、马、猪等哺乳动物,它们都有各自的行为。编程分别使各个动物表现出不同的行为。
三:相关知识
1:多态性
编译时的多态,运行时的多态性。
2:虚函数
Virtual 函数类型 函数名(形参表);
3: 抽象类
抽象类是带有纯虚函数的类。
纯虚函数的定义:
virtual 函数类型 函数名(参数表)=0;
注意:(1)抽象类不能直接建立抽象类对象;
(2)抽象类不能用作参数类型、函数返回类型或显示转换的类型;
(3) 可以说明指向抽象类的指针和引用,此指针可以指向他的派生类,进而实现多态性;
四:程序设计思想
1:为实现动态联编,首先建立 Mammal抽象类,以此抽象类作为
基类,派生dog、cat、horse、pig类。其中Mammal类数据
员有(姓名)name 、(年龄)age、(重量)we 。
还有成员函数 move()、speak(),定义为纯虚函数:
virtual void move()=0;virtual void speak()=0;
另一个成员函数display(),申明为虚函数virtual void display();
2:建立各个派生类dog、cat、horse、pig。然后建立构造函数为其初始化。再把move()、speak()定义。
3:main()函数中建立指向Mammal的指针数组,并为各派生类初始化。把指针数组分别指向各个派生类。设计一个循环来显示派生类对象的信息。
五:程序
#includeiostream.h
#includestring.h
class Mammal
{
protected:
char name[10];
int age;
int we;
public:
virtual void move()=0;
virtual void speak()=0;
virtual void display()
{
cout姓名:nameendl;
cout它的年龄:age岁endl;
cout它的重量:wekgendl;
}
};
class dog:public Mammal
{
public:
dog(char *s,int a,int w)
{
strcpy(name,s);
age=a;
we=w;
}
void move()
{
cout它的行为;
cout吃骨头;
cout 看门endl;
}
void speak()
{
cout它的叫声:;
coutbarkendl;
}
void display()
{
Mammal::display();
speak();
move();
}
};
class cat:public Mammal
{
public:
cat(char *s,int a,int w)
{
strcpy(name,s);
age=a;
we=w;
}
void move()
{
cout它的行为;
cout吃鱼 捉老鼠endl;
}
void speak()
{
cout它的叫声:;
coutmewendl;
}
void display()
{
Mammal::display();
speak();
move();
}
};
class horse:public Mammal
{
public:
horse(char *s,int a,int w)
{
strcpy(name,s);
age=a;
we=w;
}
void move()
{
cout它的行为;
cout奔驰 吃草endl;
}
void speak()
{
cout它的叫声:;
coutneighendl;
}
void display()
{
Mammal::display();
speak();
move();
}
};
class pig:public Mammal
{
public:
pig(char *s,int a,int w)
{
strcpy(name,s);
age=a;
we=w;
}
void move()
{
显示全部