33,311
社区成员
发帖
与我相关
我的任务
分享
/*main.cpp*/]
#include<iostream>
#include<vector>
#include<algorithm>
#include"CShap.h"
#include"Compare.h"
using namespace std;
vector<CShap *> pShapes;
int main()
{
int i, n;
CRectangle* pr;
CCricle* pc;
CTriangle *pt;
cout << "Please enter the number of geometry: " << endl;
cin >> n;
for (i = 0; i < n; i++){
char c;
cout << "Please enter the sharp you want to calculate:" << endl << "(R:Rectangle T:Triangle C:Cricle)" << endl;
cin >> c;
switch (c){
case 'R':
pr = new CRectangle();
cout << "Please enter the width and high: " << endl;
cin >> pr->width >> pr->high;
pShapes.push_back(pr);
break;
case 'T':
pt = new CTriangle();
cout << "Please enter sides: " << endl;
cin >> pt->a >> pt->b >> pt->c;
pShapes.push_back(pt);
break;
case 'C':
pc = new CCricle();
cout << "Please enter radius: " << endl;
cin >> pc->r;
pShapes.push_back(pc);
break;
}
}
sort(pShapes.begin(), pShapes.end(),Compare);
vector<CShap *>::iterator it;
for (it = pShapes.begin(); it != pShapes.end(); it++){
*it;
}
system("pause");
return 0;
}
/*CShap.h*/
#include<iostream>
#include<math.h>
using std::cout;
using std::endl;
class CShap{
public:
virtual double Area() = 0;
virtual void PrintInfo() = 0;
};
class CRectangle :public CShap{
public:
double width, high;
virtual double Area();
virtual void PrintInfo();
};
class CCricle :public CShap{
public:
double r;
virtual double Area();
virtual void PrintInfo();
};
class CTriangle :public CShap{
public:
double a, b, c;
virtual double Area();
virtual void PrintInfo();
};
double CRectangle :: Area(){
return width*high;
}
void CRectangle::PrintInfo(){
cout << "Rectangle: " << Area() << endl;
}
double CCricle::Area(){
double pi = 3.141592653;
return pi*r*r;
}
void CCricle::PrintInfo(){
cout << "Cricle: " << 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;
}
/*Compare.cpp*/
#include"CShap.h"
bool Compare(const void*s1, const void*s2)
{
double a1, a2;
CShap**p1;
CShap**p2;
p1 = (CShap**)s1;
p2 = (CShap**)s2;
a1 = (*p1)->Area();
a2 = (*p2)->Area();
if (a1 < a2){
return 1;
}
else{
return 0;
}
}
/*CShap.h*/
#ifndef CShap_h
#define CShap_h
#include<iostream>
#include<math.h>
using std::cout;
using std::endl;
class CShap{
public:
virtual double Area() = 0;
virtual void PrintInfo() = 0;
};
class CRectangle :public CShap{
public:
double width, high;
virtual double Area();
virtual void PrintInfo();
};
class CCricle :public CShap{
public:
double r;
virtual double Area();
virtual void PrintInfo();
};
class CTriangle :public CShap{
public:
double a, b, c;
virtual double Area();
virtual void PrintInfo();
};
#endif
/*Compare.h*/
#ifndef Compare_h
#define Compare_h
#include"CShap.h"
bool Compare(const void*s1, const void*s2);
#endif
CShap* const &
[/quote]CShap* const &
(*it)->PrintInfo();