用CPP语言深度复制构造函数的点与线类的成员指针的实例
时间: 2024-03-03 11:50:06 浏览: 70
好的,下面是一个用CPP语言深度复制构造函数的点与线类的成员指针的实例:
```cpp
#include <iostream>
using namespace std;
class Point {
public:
int x, y;
Point(int a = 0, int b = 0) : x(a), y(b) {}
Point(const Point& p) {
x = p.x;
y = p.y;
}
};
class Line {
public:
Point* start;
Point* end;
Line(Point* s = 0, Point* e = 0) : start(s), end(e) {}
Line(const Line& l) {
start = new Point(*(l.start));
end = new Point(*(l.end));
}
~Line() {
delete start;
delete end;
}
};
int main() {
Point* p1 = new Point(1, 2);
Point* p2 = new Point(3, 4);
Line* l1 = new Line(p1, p2);
Line* l2 = new Line(*l1);
cout << "l1: " << l1->start->x << ", " << l1->start->y << " -> " << l1->end->x << ", " << l1->end->y << endl;
cout << "l2: " << l2->start->x << ", " << l2->start->y << " -> " << l2->end->x << ", " << l2->end->y << endl;
delete l1;
delete l2;
return 0;
}
```
解释一下这个实例的思路:
首先我们定义了一个 Point 类和一个 Line 类。Point 类中有两个整型成员变量 x 和 y,表示一个二维平面上的点;Line 类中有两个指向 Point 类对象的指针成员变量 start 和 end,表示一条线段的起点和终点。这里我们使用指针成员变量是为了方便演示深拷贝的实现方式。
在 Line 类的构造函数中,我们通过传入的指针参数 s 和 e,分别构造了对象的 start 和 end 指针成员变量。在 Line 类的拷贝构造函数中,我们新建了两个 Point 对象,并通过传入的 Line 对象 l 的 start 和 end 指针成员变量的指向来进行深度拷贝,从而实现了 Line 类的深拷贝。
在 main 函数中,我们新建了一个 Point 对象 p1 和 p2,并新建了一个 Line 对象 l1,该对象的 start 和 end 指针成员变量分别指向了 p1 和 p2。然后,我们新建了另外一个 Line 对象 l2,该对象通过拷贝构造函数从 l1 中进行了深度拷贝。最后,我们打印出 l1 和 l2 的 start 和 end 的坐标值,并释放了两个 Line 对象的内存。
需要注意的是,由于 Line 类中 start 和 end 指针成员变量是动态分配内存的,因此我们需要在 Line 类的析构函数中释放这些内存。
阅读全文