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 16:47:23 浏览: 122
以下是实现了上述要求的代码:
```c++
#include <iostream>
#include <cmath>
using namespace std;
class Triangle {
private:
float a, b, c;
public:
Triangle() {};
Triangle(float na, float nb, float nc) {
if(na+nb>nc && na+nc>nb && nb+nc>na) {
a = na;
b = nb;
c = nc;
} else {
cout << "Invalid input, cannot form a triangle!" << endl;
exit(0);
}
}
Triangle(const Triangle &t) {
a = t.a;
b = t.b;
c = t.c;
}
float getArea() {
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; // 能够进行赋值运算
cout << "obj1 area: " << obj1.getArea() << endl;
cout << "obj2 area: " << obj2.getArea() << endl;
cout << "obj3 area: " << obj3.getArea() << endl;
return 0;
}
```
在上述代码中,我们定义了一个Triangle类,其中包含了三个私有成员变量a、b、c,分别表示三角形的三个边长。我们实现了三个构造函数:一个默认构造函数、一个带参数的构造函数和一个拷贝构造函数。其中,带参数的构造函数除了进行数据初始化以外,还加入了判断三条边是否能够构成三角形的判断,这样可以保证数据的合法性。
此外,我们还实现了一个计算三角形面积的成员函数getArea(),它使用了第4章习题12中的公式计算三角形的面积。在主函数中,我们定义了三个Triangle对象,并测试了它们的面积计算方法。同时,我们也测试了三个构造函数的调用情况,以及赋值运算符是否能够正常工作。
阅读全文