C++构造函数、析构函数、重载和友元应用

编写C++代码,实现如下功能:
1) 在平面中初始化三个点时,实现判断三个点是否能构造三角形功能;
2) 实现计算三角形面积功能,若无法构造为三角形则该“三角形”面积为 0;
3) 实现平面中比较两个三角形面积大小功能;
4) 实现求多个三角形中最小面积的功能。
注:使用所学相关知识解决,如构造函数、析构函数、重载和友元等

#include <iostream>
#include <cmath>
using namespace std;

//点坐标
class Point {
private:
    double x;
    double y;
public:
    Point(double xVal, double yVal) {
        x = xVal;//横坐标
        y = yVal;//纵坐标
    }

    double getX() const {
        return x;
    }

    double getY() const {
        return y;
    }
};


class Triangle {
private:
    Point p1;
    Point p2;
    Point p3;
public:
    Triangle(const Point& point1, const Point& point2, const Point& point3) : p1(point1), p2(point2), p3(point3) {}

    //判断这三个点能否构成三角形(面积>0)
    bool isValid() const {
        double area = 0.5 * abs((p1.getX() - p3.getX()) * (p2.getY() - p3.getY()) - (p2.getX() - p3.getX()) * (p1.getY() - p3.getY()));
        if (area > 0)
            return 1;
        else
            return 0;
    }

    //计算三角形面积(如果无法构成三角形,面积为0)
    double getArea() const {
        if (!isValid()) {
            return 0;
        }
        return 0.5 * abs((p1.getX() - p3.getX()) * (p2.getY() - p3.getY()) - (p2.getX() - p3.getX()) * (p1.getY() - p3.getY()));
    }

    //比较两个三角形的面积大小
    friend bool operator<(const Triangle& t1, const Triangle& t2) {
        return t1.getArea() < t2.getArea();
    }
};

//求多个三角形中的最小面积
double findMinimumArea(const Triangle* triangles[], int numTriangles) {
    double minArea = triangles[0]->getArea();
    for (int i = 1; i < numTriangles; i++) {
        double area = triangles[i]->getArea();
        if (area < minArea) {
            minArea = area;
        }
    }
    return minArea;
}

int main() {
    
    //给出第一个三角形的顶点坐标
    Point point1(0, 0);
    Point point2(3, 0);
    Point point3(0, 4);

    Triangle triangle(point1, point2, point3);

    //判断能否构成三角形
    if (triangle.isValid()) {
        cout << "The three points can form a triangle." << endl;
    }
    else {
        cout << "The three points can not form a triangle." << endl;
    }

    //计算三角形面积
    double area = triangle.getArea();
    cout << "The area of the triangle is: " << area << endl;

    //给出第二个三角形的顶点坐标
    Point point4(0, 0);
    Point point5(2, 0);
    Point point6(0, 3);
    Triangle triangle2(point4, point5, point6);

    //比较两个三角形的面积大小
    if (triangle < triangle2) {
        cout << "第一个三角形的面积小于第二个三角形的面积" << endl;
    }
    else {
        cout << "第一个三角形的面积大于或者等于第二个三角形的面积" << endl;
    }


    //求多个三角形中的最小面积(5个)
    Triangle triangle3(point1, point2, point3);
    Triangle triangle4(point4, point5, point6);
    Triangle triangle5(point1, point2, point6);

    const Triangle* triangles[] = { &triangle, &triangle2, &triangle3, &triangle4, &triangle5 };
    int numTriangles = sizeof(triangles) / sizeof(triangles[0]);//三角形数量
    double minArea = findMinimumArea(triangles, numTriangles);

    cout << "这" << numTriangles<<"个三角形中最小面积为:" << minArea << endl;

    return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值