C++实验05(02)抽象类与纯虚函数

题目描述
定义一个抽象类Shape,有一个纯虚函数calArea(),返回值为double型。由Shape类派生出4种几何图形:Triangle、Rectangle、Square、Circle,各自新增的数据成员均为double型。
定义两个普通的重载函数fun():返回值均为void,形参分别是抽象类的对象指针、抽象类的对象引用,在函数中通过指针或引用调用虚函数calArea(),输出结果。
主函数中,分别定义Triangle、Rectangle、Square、Circle类的对象,各初始值由键盘输入,分别调用fun(),输出各种图形的面积。
PI:3.1415926
输入描述
三角形的底和高
长方形的长和宽
正方形的连长
圆的半径
输出描述
分别调用fun()之后的结果
输入样例
5 7
4 5
6.7
3.4
输出样例
计算三角形面积:
通过基类指针调用,面积为:17.5
通过基类对象引用调用,面积为:17.5
计算长方形面积:
通过基类指针调用,面积为:20
通过基类对象引用调用,面积为:20
计算正方形面积:
通过基类指针调用,面积为:44.89
通过基类对象引用调用,面积为:44.89
计算圆形面积:
通过基类指针调用,面积为:36.3168
通过基类对象引用调用,面积为:36.3168

#include <iostream>
#define PI 3.1415926
using namespace std;
class Shape

{
public:
	virtual double calArea() = 0;
};
void fun(Shape *a)
{

	cout << "通过基类指针调用,面积为:" << a->calArea() << endl;

}
void fun(Shape &a)
{
	cout << "通过基类对象引用调用,面积为:" << a.calArea() << endl;
}
class Triangle : public Shape
{
public:
	Triangle(double x, double y) 
	{
		a = x;
		b = y;
	}
	double calArea()
	{
		return 0.5*a*b;
	}
private:
	double a, b;
};

class Rectangle : public Shape
{
public:
	Rectangle(double x, double y) 
	{
		a = x;
		b = y;
	}
	double calArea()
	{
		return a * b;
	}
private:
	double a, b;

};

class Square : public Shape
{
public:
	Square(double x) 
	{
		a = x;
	}
	double calArea()
	{
		return a * a;
	}
private:
	double a;

};

class Circle : public Shape
{
public:
	Circle(double x) 
	{
		a = x;
	}
	double calArea()
	{
		return a * a*PI;
	}
private:
	double a;

};



int main()
{
	Shape *ptr;
	double a, b, c, d;
	double x, r;
	cin >> a >> b >> c >> d >> x >> r;
	Triangle t(a, b);
	ptr = &t;
	Shape &o = t;
	cout << "计算三角形面积:" << endl;
	fun(ptr);
	fun(o);
	Rectangle re(c, d);
	ptr = &re;
	Shape &o1 = re;
	cout << "计算长方形面积:" << endl;
	fun(ptr);
	fun(o1);
	Square s(x);
	ptr = &s;
	Shape &o2 = s;
	cout << "计算正方形面积:" << endl;
	fun(ptr);
	fun(o2);
	Circle cir(r);
	ptr = &cir;
	Shape &o3 = cir;
	cout << "计算圆形面积:" << endl;
	fun(ptr);
	fun(o3);
	return 0;
}
  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bmNkotc2AECynaY6

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值