今天写一个C++的形状类,涉及虚基类,组合,继承的知识
用于计算每种形状的面积
代码如下:
#include <iostream>
#include <cmath>
using namespace std;
class Point{//点类
float x,y;
public:
Point(float x1,float y1)
{
x = x1;
y = y1;
}
void Transform(float x,float y)//改变点的位置
{
this->x = x;
this->y = y;
}
};
class Shape{//形状类
Point center;
public:
Shape(float x = 0,float y = 0):center(x,y) { }
void Transform(float x,float y)
{
center.Transform(x,y);
}
virtual float Scale() = 0;
};
class Triangle:public Shape{//三角形类
float a,b,c;
public:
Triangle(float x,float y,float z)
{
a = x;
b = y;
c = z;
}
float Scale();
};
class Rectangle:public Shape{//矩形
float a,b;
public:
Rectangle(float x,float y)
{
a = x;
b = y;
}
float Scale();
};
class Circle:public Shape{//圆形
float r;
const double pi;
public:
Circle(float R):pi(3.1415926)
{
r = R;
}
float Scale();
void Print()
{
cout<<r<<endl;
}
};
class Ellipse:public Shape{//椭圆
float a,b;
const double pi;
public:
Ellipse(float a1,float b1):pi(3.1415926)
{
a = a1;
b = b1;
}
float Scale();
};
//函数实现
float Triangle::Scale()//海伦公式
{
float p = (a + b + c)/2;
float s = p * (p - a) * (p - b) * (p - c);
return sqrt(s);
}
float Rectangle::Scale()
{
return a * b;
}
float Circle::Scale()
{
return pi * r * r;
}
float Ellipse::Scale()
{
return pi * a * b;
}
void f(Shape *p)
{
cout<< p->Scale()<<endl;
}
//测试
int main()
{
Triangle t(3,4,5);
Rectangle a(1.1,1.1);
Circle r(2);
Ellipse e(2,2);
f(&t);
f(&a);
f(&r);
f(&e);
return 0;
}