c++基础-利用虚函数实现动态多态性,以shap作为虚基类,对圆,矩形和三角形进行面积计算

写一个程序,定义抽象基类Shape,它有三个公有派生类:类Circle用来描述圆形,类Rectangle用来描述矩形,类Triangle用来描述三角形。用虚函数area( )分别计算几种图形的面积,并求它们的和。

#include<iostream>
#include<math.h>
#define pi 3.1415926			//全局常量圆周率
using namespace std;
class Shape {					//抽象基类Shap
public:
	virtual double area() = 0;  //声明area函数为纯虚函数
};
class Circle :public Shape {	//派生类圆
public:
	Circle(double r):r(r){}		//构造函数
	virtual double area(){		//圆的面积
		return pi * r*r;
	}
private:
	double r;
};
class Rectangle :public Shape{	//派生类矩形
public:
	Rectangle(double x,double y):x(x),y(y){}
	virtual double area()		//派生类的同名函数自动成为虚函数,virtual可加可不加
	{							//矩形面积长乘宽
		return x*y;
	}
private:
	double x, y;
};
class Triangle :public Shape {	//派生类三角形
public:
	Triangle(double x, double y,double z) :x(x), y(y),z(z) {}
	virtual double area()		//已知三角形三边,利用 海伦公式 计算面积
	{
		double p = (x + y + z) / 2;
		return  sqrt(p*(p-x)*(p-y)*(p-z));
	}
private:
	double x, y, z;
};
int main() {
	Circle C(2);
	Rectangle R(2, 4);
	Triangle T(3, 4, 5);
	Shape *index = &C;	//定义指向抽象基类对象Shape的指针变量index,指向Circle类对象C
	cout << "Circle area:" << index->area() << endl;	//调用Circle类对象C的area函数并输出
	index = &R;			//让index指向Rectangle类对象R
	cout << "Rectangle area:" << index->area() << endl;
	index = &T;
	cout << "Triangle area:" << index->area() << endl;
	cout << "area sum= " << C.area() + R.area() + T.area() << endl;//静态关联算总面积
	return 0;
} 

运行结果⬇
在这里插入图片描述

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值