riangle),其数据成员三角形的三个边长(float型),其中有如下成员函数:(1)默认构造函数、带参数的构造函数(除具有初始化数据功能外,还有判断三边长是否能构成三角形的功能);(此处可以仿效例9.2的代码)(2)计算三角形面积的成员函数;(第4章习题12的公式)在主函数中定义两个对象。在主函数中测试以上成员函数,并观察两个构造函数调用的情况。int main(){ Triangle obj1(3,4,5); //这里调用哪个构造函数? Triangle obj2(obj1); //这里调用哪个构造函数? Triangle obj3; //这里调用哪个构造函数?obj3=obj2; //能否进行赋值运算? … //分别输出obj1,obj2,obj3的面积return 0;}
时间: 2024-03-09 15:46:14 浏览: 89
好的,我明白了。这是一个关于三角形类的问题,其中包括默认构造函数、带参数的构造函数和计算三角形面积的成员函数。在主函数中定义两个对象并测试以上成员函数,同时观察构造函数的调用情况。下面是代码及解析:
```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。
阅读全文