class Circle:public Shape {
private : double d; point p; public :
Circle(double c,point n):Shape(c,c) {
d=c; p=n;
cout<<\创建Circle\ }
~Circle() {
cout <<\释放Circle\ }
double area() {
double s; s=3.14*d*d; return s; }
/*void show () {
cout <<\ }*/ };
int _tmain(int argc, _TCHAR* argv[]) {
Rectangle p (2,2);
Shape * r=new Rectangle; r=&p;
r->show(); point o(1,1); Circle c (2.0,o);
}
r=&c;
r->show (); Square s(2); r=&s;
r->show();
Shape作为基类公共派生了子类,其中area函数作为虚函数,程序中使用对象指针来访问函数成员。这样,能够对同一类族中的对象进行统一的处理派生类的虚函数便覆盖了基类的虚函数,同时,派生类的虚函数还会隐藏基类中同名函数的所有其他重载形式。用虚函数代码中注释的部分可以不写,这样使程序更简洁,更高效。
(4)运行结果(截图)
实验7 多态性
1.1 实验目的和要求
1、 掌握将运算符重载为成员函数与非成员函数的区别。 2、 掌握静态编联与动态联编的概念、区别及实现方式。 2、 掌握利用虚函数实现动态多态的方法。
3、 掌握利用纯虚函数与抽象类实现动态多态的方法。
1.2 所占学时数
本实验安排2个实验课时。
1.3 实验任务
1.3.1 任务一 (1)题目名称
定义一个基类为哺乳动物类mammal,其中有数据成员年龄、重量、品种,有成员函数move()、speak()、eat()等,以此表示动物的行为。由这个基类派生出狗、猫、马、猪等哺乳动物,它们都有各自的行为。编程分别使各个动物表现出不同的行为。 (2)构思过程(可用文字、流程图、UML图等方式表达) 编程思想:
1、为实现动态联编,首先建立Mammal抽象类,以此抽象类作为基类,派生dog、cat、horse、pig类。其中Mammal类数据员有(姓名)name 、(年龄)age、(重量)weight。成员函数move()、
eat()、speak(),定义为纯虚函数:另一个成员函数display(),声明为虚函数。
2、建立各个派生类dog、cat、horse、pig。然后建立构造函数为其初始化。再定义函数move()、speak()、eat()等。 3、main()
函数中建立指向Mammal的指针数组,并为各派生类初始化。把指针数组分别指向各个派生类。设计一个循环来显示派生类对象的信息。 (3)程序源码
#include
int age;
double weight; string name; public:
Mammal() {
age=weight=0; name=\ }
Mammal(string s,double d,int a) {
age=a; weight=d; name=s; } public:
virtual void move ()=0;
virtual void speak ()=0; virtual void eat ()=0; virtual void display() {
cout<<\种类:\量:\年龄:\ }
virtual ~Mammal(){} };
class Dog:public Mammal {
public:
Dog():Mammal(\
Dog(string s,double d,int a):Mammal(s,d,a){} void move() {
cout<<\ }
void speak() {
cout<<\ }
void eat() {
cout<<\ } };
class Cat:public Mammal {
public:
Cat():Mammal(\
Cat(string s,double d,int a):Mammal(s,d,a){} void move() {
cout<<\
重

