[北大程序设计与算法]--虚函数与多态的实例

在这里插入图片描述
在这里插入图片描述

#include<iostream>
#include<vector>
#include<map>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<set>
#include<queue>
#include<unordered_map>
#include<cmath>
using namespace std;
class CShape
{
public:
	virtual double area() = 0;
	virtual void printInfo() = 0;
};
class CRectangle :public CShape
{
public: 
	int w, h;
	virtual double area();
	virtual void printInfo();
};
class CCircle :public CShape
{
public:
	int r;
	virtual double area();
	virtual void printInfo();
};
class CTriangle :public CShape
{
public:
	int a, b, c;
	virtual double area();
	virtual void printInfo();
};
double CRectangle::area()
{
	return w*h;
}
void CRectangle::printInfo()
{
	cout << "Rectangle:" << area() << endl;
}
double CCircle::area()
{
	return 3.14*r*r;
}
void CCircle::printInfo()
{
	cout << "CCircle:" << area() << endl;
}
double CTriangle::area()
{
	double p = (a + b + c) / 2.0;
	return sqrt(p * (p - a) * (p - b) * (p - c));
}
void CTriangle::printInfo()
{
	cout << "Triangle:" << area() << endl;
}
bool mycompare(CShape* a, CShape* b)
{
	return a->area() < b->area();
}
int main()
{
	CShape* p[100];
	int i; int n;
	CRectangle* pr; CCircle* pc; CTriangle* pt;
	cin >> n;
	for (i = 0; i < n; i++)
	{
		char c;
		cin >> c;
		switch(c)
		{
		case 'R':
			p[i] = new CRectangle;
			cin >> pr->w >> pr->h;
			p[i] = pr;
			break;
		case 'C':
			pc = new CCircle;
			cin >> pc->r;
			p[i] = pc;
			break;
		case 'T':
			pt = new CTriangle;
			cin >> pt->a >> pt->b >> pt->c;
			p[i] = pt;
			break;
		}
	}
	sort(p, p + n, mycompare);
	for (i = 0; i < n; i++)
	{
		p[i]->printInfo();
	}
	return 0;		
}
原文地址:https://www.cnblogs.com/Hsiung123/p/13811943.html