C++设计一个图形类,从其派生矩形,圆,三角形等类,设计计算图形面积函 数f1,判断点是否在图形内部函数f2
时间: 2023-08-16 20:05:58 浏览: 118
点类派生矩形类、圆类,并判断点与图形的位置关系
5星 · 资源好评率100%
好的,我会根据您的要求回答问题,以下是C++的代码实现:
```cpp
#include <iostream>
#include <cmath>
using namespace std;
class Shape{
public:
virtual double f1() = 0; // 计算图形面积
virtual bool f2(double x, double y) = 0; // 判断点是否在图形内部
};
class Rectangle : public Shape{
private:
double length, width;
public:
Rectangle(double l, double w):length(l), width(w){} // 构造函数
double f1() override { return length * width; } // 计算矩形面积
bool f2(double x, double y) override { // 判断点是否在矩形内部
if (x < 0 || x > length || y < 0 || y > width)
return false;
else
return true;
}
};
class Circle : public Shape{
private:
double radius;
public:
Circle(double r):radius(r){} // 构造函数
double f1() override { return M_PI * radius * radius; } // 计算圆面积
bool f2(double x, double y) override { // 判断点是否在圆内部
double distance = sqrt(x * x + y * y);
if (distance <= radius)
return true;
else
return false;
}
};
class Triangle : public Shape{
private:
double base, height;
public:
Triangle(double b, double h):base(b), height(h){} // 构造函数
double f1() override { return 0.5 * base * height; } // 计算三角形面积
bool f2(double x, double y) override { // 判断点是否在三角形内部
if (x < 0 || x > base || y < 0 || y > height)
return false;
else if (y > height - x * height / base)
return false;
else
return true;
}
};
int main(){
Shape* s1 = new Rectangle(4, 5);
Shape* s2 = new Circle(2);
Shape* s3 = new Triangle(3, 4);
cout << "Rectangle area: " << s1 -> f1() << endl;
cout << "Is point (2, 3) in rectangle: " << s1 -> f2(2, 3) << endl;
cout << "Circle area: " << s2 -> f1() << endl;
cout << "Is point (1, 1) in circle: " << s2 -> f2(1, 1) << endl;
cout << "Triangle area: " << s3 -> f1() << endl;
cout << "Is point (2, 3) in triangle: " << s3 -> f2(2, 3) << endl;
return 0;
}
```
以上代码中,我们定义了一个抽象的 `Shape` 类,包含两个纯虚函数:`f1()` 和 `f2()`,分别用于计算图形面积和判断点是否在图形内部。然后从 `Shape` 类派生出 `Rectangle`、`Circle` 和 `Triangle` 三个类,并分别实现它们的面积计算和判断点是否在内部的函数。在主函数中,我们使用基类的指针来指向派生类的对象,然后分别调用它们的函数来计算面积和判断点是否在内部。
阅读全文