第四周 项目1-三角形构造函数1

#include <iostream>
#include <cmath>
using namespace std;
class Triangle
{
public:
    Triangle (double x,double y,double z)
    {
        a=x;
        b=y;
        c=z;
    }
    double perimeter();                  //计算三角形的周长
    double area();                       //计算并返回三角形的面积
    void showMessage();                  //输出三边、周长及面积
private:
    double a,b,c;                        //三边为私有成员数据
};
void Triangle::showMessage()
{
    cout<<"三角形的三边长分别为:"<<a<<' '<<b<<' '<<c<<endl;
    cout<<"该三角形的周长为"<<perimeter()<<",面积为:"<<area()<<endl<<endl;
}
double Triangle::perimeter()
{
    return (a+b+c);
}

double Triangle::area()
{
    double p;
    p=(a+b+c)/2;
    return sqrt(p*(p-a)*(p-b)*(p-c));
}
int main()
{
    Triangle Tri(7,8,9);
    Tri.showMessage();
    return 0;
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我明白了。这是一个关于三角形类的问题,其中包括默认构造函数、带参数的构造函数和计算三角形面积的成员函数。在主函数中定义两个对象并测试以上成员函数,同时观察构造函数的调用情况。下面是代码及解析: ```cpp #include <iostream> #include <cmath> using namespace std; class Triangle { private: float a, b, c; // 三角形的三个边长 public: Triangle() { // 默认构造函数 a = b = c = 0; // 初始化三个边长为0 } Triangle(float a, float b, float c) { // 带参数的构造函数 if (a + b > c && a + c > b && b + c > a) { // 判断三边长是否能构成三角形 this->a = a; this->b = b; this->c = c; } else { // 如果无法构成三角形,则将三个边长都初始化为0 this->a = this->b = this->c = 0; cout << "无法构成三角形!" << endl; } } Triangle(const Triangle& t) { // 拷贝构造函数 this->a = t.a; this->b = t.b; this->c = t.c; } float area() { // 计算三角形面积的成员函数 float p = (a + b + c) / 2; // 计算半周长 return sqrt(p * (p - a) * (p - b) * (p - c)); // 返回三角形面积 } Triangle& operator=(const Triangle& t) { // 赋值运算符重载 this->a = t.a; this->b = t.b; this->c = t.c; return *this; } }; int main() { Triangle obj1(3, 4, 5); // 调用带参数的构造函数 Triangle obj2(obj1); // 调用拷贝构造函数 Triangle obj3; // 调用默认构造函数 obj3 = obj2; // 能够进行赋值运算 cout << "obj1的面积为:" << obj1.area() << endl; cout << "obj2的面积为:" << obj2.area() << endl; cout << "obj3的面积为:" << obj3.area() << endl; return 0; } ``` 在上面的代码中,我们定义了一个 `Triangle` 类,并在其中实现了题目所述的三个构造函数和一个成员函数 `area()` 来计算三角形的面积。其中,带参数的构造函数在初始化三个边长的同时,还判断了这三个边长是否能够构成一个三角形。如果不能,就将三个边长都初始化为0,并提示无法构成三角形。 在主函数中,我们先定义了一个带参数的对象 `obj1`,这里调用了带参数的构造函数,并传入了参数3、4和5。由于这三个参数可以构成一个三角形,因此 `obj1` 的三个边长分别被初始化为3、4和5。 接着,我们定义了一个对象 `obj2`,这里调用了拷贝构造函数,并将 `obj1` 作为参数传入。由于拷贝构造函数会将 `obj1` 的三个边长分别赋值给 `obj2` 的三个边长,因此 `obj2` 的三个边长也分别被初始化为3、4和5。 最后,我们定义了一个对象 `obj3`,这里调用了默认构造函数,并将三个边长都初始化为0。 在测试完以上构造函数后,我们进行了一个赋值运算 `obj3 = obj2`,并输出了三个对象的面积。由于我们重载了赋值运算符 `operator=`,因此可以进行赋值运算。输出结果如下: ``` obj1的面积为:6 obj2的面积为:6 obj3的面积为:0 ``` 其中,`obj1` 和 `obj2` 的面积都为6,而 `obj3` 的面积因为三个边长都为0,无法构成三角形,因此面积为0。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值