/*
1303: 第12章 多态性与虚函数_上机
时间限制:1.000s 内存限制:128MB
题目描述
写一个程序,定义抽象基类Shape,由它派生出5个派生类:Circle(圆形)、Square(正方形)、Rectangle(矩形)、Trapezoid(梯形)、Triangle(三角形)。用虚函数分别计算几种图形面积,并求它们的和。要求用基类指针数组,使它的每一个元素指向一个派生类对象。
在主函数中直接给出圆的半径:12.6,正方形的边长3.5,矩形的长8.4、宽4.5,梯形的上底2.0、下底4.5、高3.2,三角形底边长4.5、高8.4。
输出格式
各种图形的面积总和,格式如下
totol of all areas=XX
样例输出
totol of all areas=578.109
*/
/*
#include<iostream>
using namespace std;
class Shape
{
public:
virtual double area() const = 0;
};
class Circle :public Shape
{
public:
Circle(double r) :radius(r)
{
}
virtual double area() const
{
return 3.14159*radius*radius;
}
protected:
double radius;
};
class Square :public Shape
{
public:
Square(double s) :side(s)
{
}
virtual double area() const
{
return side*side;
}
protected:
double side;
};
class Rectangle :public Shape
{
public:
Rectangle(double w, double h) :width(w), height(h)
{
}
virtual double area() const
{
return width*height;
}
protected:
double width, height;
};
class Trapezoid :public Shape
{
public:
Trapezoid(double t, double b, double h) :top(t), bottom(b), height(h)
{
}
virtual double area() const
{
return 0.5*(top + bottom)*height;
}
protected:
double top, bottom, height;
};
class Triangle :public Shape
{
public:
Triangle(double w, double h) :width(w), height(h)
{
}
virtual double area() const
{
return 0.5*width*height;
}
protected:
double width, height;
};
int main()
{
Circle circle(12.6);
Square square(3.5);
Rectangle rectangle(4.5, 8.4);
Trapezoid trapezoid(2.0, 4.5, 3.2);
Triangle triangle(4.5, 8.4);
Shape *pt[5] =
{
&circle, &square, &rectangle, &trapezoid, &triangle
};
double areas = 0.0;
for (int i = 0; i<5; i++)
{
areas = areas + pt[i]->area();
}
cout << "total of all areas=" << areas;
return 0;
}
*/
/*
1384: C++第12章 虚函数实现多态性
时间限制:1.000s 内存限制:128MB
题目描述
定义宠物类Pet,包含虚函数Speak,显示如下信息“How does a pet speak ? ”; 定义公有派生类Cat和Dog,其Speak成员函数分别显示:“miao!miao!”和“wang!wang!”。主函数中定义Pet,Cat和Dog对象,再定义Pet指针变量,分别指向Pet,Cat和Dog对象,并通过指针调用Speak函数,观察并分析输出结果。
输入格式
不需要输入
输出格式
各类调用Speak函数输出的结果
样例输出
How does a pet speak ?
miao!miao!
wang!wang!
*/
/*
//虚函数实现多态性
#include<iostream>
using namespace std;
class Pet
{
public:
virtual void speak();
};
void Pet::speak()
{
cout << "How does a pet speak?" << endl;
}
/********************************************/
class Cat :public Pet
{
public:
virtual void speak()
{
cout << "miao!miao!" << endl;
}
};
/************************************************/
class Dog :public Pet
{
public:
virtual void speak()
{
cout << "wang!wang!" << endl;
}
};
/**********************************************/
int main()
{
Pet a;
Cat b;
Dog c;
Pet* p;
p = &a;
p->speak();
p = &b;
p->speak();
p = &c;
p->speak();
return 0;
}
*/