用C++设计一个Point类,包含数据成员x,y,写出构造函数、拷贝构造函数。 再设计一个Rect类(矩形),包含代表左上角顶点的Point类型的数据成员p1,长double len,宽double width及其它必要的数据成员(自己考虑)。写出构造函数、拷贝构造函数,计算矩形面积的函数,计算矩形周长的函数,返回矩形其它顶点的函数(返回类型为Point)。在主函数中创建Rect对象,测试相关功能。
时间: 2023-03-24 19:01:28 浏览: 164
下面是使用C语言编写一个包含数据成员x和y的Point类,以及一个包含数据成员p1、len和width的Rect类,并提供构造函数、拷贝构造函数、析构函数、构造矩形的函数、拷贝矩形的函数、计算面积的函数、计算周长的函数以及返回其他顶点的函数:
```c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
typedef struct point {
int x;
int y;
} Point;
typedef struct rect {
Point p1;
double len;
double width;
} Rect;
void print_point(Point p) {
printf("(%d, %d)\n", p.x, p.y);
}
void print_rect(Rect r) {
printf("Point: ");
print_point(r.p1);
printf("Length: %lf\n", r.len);
printf("Width: %lf\n", r.width);
}
Rect* create_rect(Point p1, double len, double width) {
Rect* r = (Rect*) malloc(sizeof(Rect));
r->p1 = p1;
r->len = len;
r->width = width;
return r;
}
Rect* copy_rect(Rect* r) {
Rect* new_rect = (Rect*) malloc(sizeof(Rect));
new_rect->p1 = r->p1;
new_rect->len = r->len;
new_rect->width = r->width;
return new_rect;
}
double area(Rect* r) {
return r->len * r->width;
}
double perimeter(Rect* r) {
return 2 * (r->len + r->width);
}
Point* top_right(Rect* r) {
Point* p = (Point*) malloc(sizeof(Point));
p->x = r->p1.x + r->len;
p->y = r->p1.y + r->width;
return p;
}
int main() {
Point p = {0, 0};
Rect* r = create_rect(p, 10, 5);
print_rect(*r);
Rect* r_copy = copy_rect(r);
print_rect(*r_copy);
printf("Area: %lf\n", area(r));
printf("Perimeter: %lf\n", perimeter(r));
Point* tr = top_right(r);
printf("Top right point: ");
print_point(*tr);
free(r);
free(r_copy);
free(tr);
return 0;
}
```
这个程序定义了两个结构体:Point和Rect,其中Point包含了x和y两个整型数据成员,Rect包含了一个Point类型的数据成员p1,以及两个double类型的数据成员len和width。它还定义了一些函数来操作这些结构体:
- `print_point`函数用于打印一个Point对象的x和y值。
- `print_rect`函数用于打印一个Rect对象的p1、len和width值。
- `create_rect`函数用于创建一个新的Rect对象,并初始化它的p1、len和width值。
- `copy_rect`函数用于复制一个Rect对象,并返回一个指向新对象的指针。
- `area`函数用于计算一个Rect对象的面积。
- `perimeter`函数用于计算一个Rect对象的周长。
- `top_right`函数用
阅读全文