class Triangle { public: Triangle(Point a,Point b,Point c); Triangle(); double getGirth(); //三角形周长 double getArea(); //三角形面积 int IsATriangle(); //判断三个点是否能构成三角形 private: Point pa,pb,pc; Line la,lb,lc; };
时间: 2024-04-27 12:22:42 浏览: 15
这是一个 C++ 的 Triangle 类定义,由三个 Point 对象组成,表示一个三角形。类中定义了两个构造函数,一个默认构造函数 Triangle(),一个构造函数 Triangle(Point a, Point b, Point c),和三个公有函数 getGirth()、getArea() 和 IsATriangle()。
构造函数 Triangle(Point a, Point b, Point c) 的实现中,将传入的三个 Point 对象分别赋值给成员变量 pa、pb、pc,并且使用这三个点初始化了三条边 la、lb、lc。
getGirth() 函数的实现中,分别获取三条边的长度,然后将其相加得到三角形周长。
getArea() 函数的实现中,使用海伦公式计算三角形面积。海伦公式是根据三角形的三边长计算面积的公式。
IsATriangle() 函数的实现中,判断三个点是否能构成三角形。如果三条边都存在且第 i 条边的长度小于第 i+1 和 i+2 条边长度之和,则可以构成三角形。
相关问题
Triangle::Triangle(Point a,Point b,Point c):la(a,b),lb(a,c),lc(b,c){ } double Triangle::getGirth(){ return la.GetDistance()+lb.GetDistance()+lc.GetDistance(); } double Triangle::getArea(){ double h; h = (getGirth()/2); return sqrt(h*(h-la.GetDistance())*(h-lb.GetDistance())*(h-lc.GetDistance())); }
这里是 Triangle 类的函数实现部分,包括构造函数 Triangle(Point a, Point b, Point c)、getGirth() 和 getArea() 函数。
构造函数 Triangle(Point a, Point b, Point c) 的实现中,使用 a、b、c 三个点初始化了三条边 la、lb、lc。
getGirth() 函数的实现中,使用 la、lb、lc 三条边的 GetDistance() 函数获取它们的长度,然后将它们相加得到三角形周长。
getArea() 函数的实现中,首先调用 getGirth() 函数获取三角形周长,然后使用海伦公式计算三角形面积。其中 h 是周长的一半,而 la、lb、lc 三条边的长度则分别通过 la.GetDistance()、lb.GetDistance() 和 lc.GetDistance() 获取。
第五题: 以下为定义的图形继承体系: class Shape{ public: // . . . virtual double area(){} }; class Circle:public Shape{ public: double area(){…} // . . . }; class Triangle:public Shape{ public: double area(){…} // . . . }; // . . . 以下为容器类: class Manage{ shape *a[100]; public: // . . . } 要求完成Manage类的拷贝构造函数,实现深度拷贝;可以改动所有的类,并给出main函数测试程序。
为了实现深度拷贝,需要对Manage类的拷贝构造函数进行重载,具体实现如下:
```c++
#include <iostream>
using namespace std;
class Shape{
public:
virtual double area(){}
};
class Circle: public Shape{
public:
double area(){ return 0.0; }
};
class Triangle: public Shape{
public:
double area(){ return 0.0; }
};
class Manage{
Shape *a[100];
int size;
public:
// 默认构造函数
Manage(): size(0){}
// 拷贝构造函数
Manage(const Manage &other){
size = other.size;
for(int i = 0; i < size; i++){
if(dynamic_cast<Circle*>(other.a[i])){
a[i] = new Circle(*(Circle*)other.a[i]);
}
else{
a[i] = new Triangle(*(Triangle*)other.a[i]);
}
}
}
// 析构函数
~Manage(){
for(int i = 0; i < size; i++){
delete a[i];
}
}
// 添加图形
void add(Shape *s){
a[size++] = s;
}
// 打印所有图形的面积
void print(){
for(int i = 0; i < size; i++){
cout << "Area of shape " << i+1 << ": " << a[i]->area() << endl;
}
}
};
int main(){
Manage m1;
m1.add(new Circle());
m1.add(new Triangle());
m1.print();
Manage m2 = m1; // 调用拷贝构造函数
m2.print();
return 0;
}
```
在拷贝构造函数中,对于每个元素进行判断,如果是Circle类型,则调用Circle的拷贝构造函数进行深度拷贝,否则调用Triangle的拷贝构造函数。同时,在析构函数中,需要对所有的Shape指针进行释放。最后,在main函数中,我们定义了两个Manage对象m1和m2,将m1赋值给m2,测试其拷贝构造函数是否实现了深度拷贝。