7-003几何形体面积排序,有错,待改

本文通过C++代码示例介绍了如何实现形状类的继承与多态,包括矩形、圆形和三角形等子类,并展示了如何利用基类指针调用不同派生类的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<stdafx.h>
#include<iostream>
#include<stdio.h>
#include<math.h> 
using namespace std;
class CShape{
public:
	virtual double Area() = 0;//pure virtual fun
	virtual void PrintInfo()= 0;
};
class CRectangle :public CShape//public mean??
{
public:
	int w, h;
	virtual double Area();//virtual mean??
	virtual void PrintInfo();
	double CRectangle::Area()
	{
		return w*h;
	}
	double CRectangle::PrintInfo()
	{
		cout << "CRectangle:" << Area() << endl;
	}
};
class CCircle :public CShape{
public:
	int r;
	virtual double Area();//virtual mean??
	virtual void PrintInfo();
	double CCircle::Area()
	{
		return 3.14*r*r;
	}
	double CCircle::PrintInfo()
	{
		cout << "CCircle:" << Area() << endl;
	}
};
class CTriangle :public CShape{
public:
	int a, b, c;
	virtual double Area();//virtual mean??
	virtual void PrintInfo();
	double CTriangle::Area()
	{
		double p = (a + b + c) / 2.0;
		return sqrt(p*(p - a)*(p - b)*(p - c));
	}
	double CTriangle::PrintInfo()
	{
		cout << "CTriangle:" << Area() << endl;
	}
};
CShape *pShapes[100]; //基类指针,使用多态
int MyCompare(const void *s1, const void *s2);
int main()
{
	int n;
	CRectangle *pr; CCircle *pc; CTriangle *pt;
	cin >> n;
	for (int i; i<n; i++)
	{
		char c;
		cin >> c;
		switch (c)
		{
		case'R':
			pr = new CRectangle();
			cin >> pr->>w >> pr->h;
			pShapes[i] = pr;
			break;
		case'C':
			pr = new CCircle();
			cin >> pr->>r;
			pShapes[i] = pc;
			break;
		case'T':
			pr = new CTriangle();
			cin >> pr->>a >> pr->b >> pr->c;
			pShapes[i] = pt;
			break;
		}
	}
	qsort(pShapes, n, sizeof(CShape*), Mycompare);
	for (i = 0; i<n; i++)
	{
		pShapes[i]->PrintInfo();
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值