1.编写一个三角形类(Triangle),其数据成员三角形的三个边长(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 21:47:05 浏览: 23
以下是题目要求的Triangle类的实现:
```c++
#include <iostream>
#include <cmath> //用于计算三角形面积
using namespace std;
class Triangle {
private:
float a, b, c; //三角形的三个边长
public:
//默认构造函数
Triangle() {
a = b = c = 0;
}
//带参数的构造函数
Triangle(float a, float b, float c) {
if (a + b <= c || a + c <= b || b + c <= a) {
cout << "无法构成三角形!" << endl;
a = b = c = 0;
} else {
this->a = a;
this->b = b;
this->c = c;
}
}
//拷贝构造函数
Triangle(const Triangle &t) {
a = t.a;
b = t.b;
c = t.c;
}
//计算三角形面积的成员函数
float area() {
float p = (a + b + c) / 2; //计算半周长
return sqrt(p * (p - a) * (p - b) * (p - c)); //使用海伦公式计算面积
}
};
int main() {
Triangle obj1(3, 4, 5); //调用带参数的构造函数
Triangle obj2(obj1); //调用拷贝构造函数
Triangle obj3; //调用默认构造函数
obj3 = obj2; //能够进行赋值运算,调用默认的赋值运算符函数
//分别输出obj1,obj2,obj3的面积
cout << "obj1的面积为:" << obj1.area() << endl;
cout << "obj2的面积为:" << obj2.area() << endl;
cout << "obj3的面积为:" << obj3.area() << endl;
return 0;
}
```
输出结果为:
```
obj1的面积为:6
obj2的面积为:6
obj3的面积为:0
```
在构造函数部分,当传入的三个参数无法构成三角形时,我们将三角形的三个边长都设置为0。在计算面积时,如果三角形无法构成,则输出的面积为0。在拷贝构造函数和赋值运算符函数中,我们都直接将成员变量的值赋值给新的对象或者相应的成员变量。