c++中深层复制(浅层复制运行错误)成功运行-----sample

  下面随笔给出c++中深层复制(浅层复制运行错误)成功运行------sample。

浅层复制与深层复制

  • 浅层复制

    • 实现对象间数据元素的一一对应复制。

  • 深层复制

    • 当被复制的对象数据成员是指针类型时,不是复制该指针成员本身,而是将指针所指对象进行复制。

浅层复制-系统默认复制构造函数(运行错误)

 1 //例 对象的浅层复制
 2 
 3 #include <iostream>
 4 
 5 #include <cassert>
 6 
 7 using namespace std;
 8 
 9 class Point {
10 
11 //类的声明略
12 
13 //……
14 
15 };
16 
17 class ArrayOfPoints {
18 
19 //类的声明略
20 
21 //……
22 
23 };
24 
25  
26 
27 int main() {
28 
29   int count;
30 
31   cout << "Please enter the count of points: ";
32 
33   cin >> count;
34   
35   ArrayOfPoints pointsArray1(count); //创建对象数组
36 
37   pointsArray1.element(0).move(5,10);
38 
39   pointsArray1.element(1).move(15,20);
40 
41  
42 
43   ArrayOfPoints pointsArray2(pointsArray1); //创建副本
44 
45  
46 
47   cout << "Copy of pointsArray1:" << endl;
48 
49   cout << "Point_0 of array2: " << pointsArray2.element(0).getX() << ", "
50 
51   << pointsArray2.element(0).getY() << endl;
52 
53   cout << "Point_1 of array2: " << pointsArray2.element(1).getX() << ", "
54 
55   << pointsArray2.element(1).getY() << endl;
56 
57   pointsArray1.element(0).move(25, 30);
58 
59   pointsArray1.element(1).move(35, 40);
60 
61  
62 
63   cout<<"After the moving of pointsArray1:"<<endl;
64 
65  
66 
67   cout << "Point_0 of array2: " << pointsArray2.element(0).getX() << ", "
68 
69   << pointsArray2.element(0).getY() << endl;
70 
71   cout << "Point_1 of array2: " << pointsArray2.element(1).getX() << ", "
72 
73   << pointsArray2.element(1).getY() << endl;
74 
75  
76 
77   return 0;
78 
79 }

运行结果如下:

 1 Please enter the number of points:2
 2 
 3 Default Constructor called.
 4 
 5 Default Constructor called.
 6 
 7 Copy of pointsArray1:
 8 
 9 Point_0 of array2: 5, 10
10 
11 Point_1 of array2: 15, 20
12 
13 After the moving of pointsArray1:
14 
15 Point_0 of array2: 25, 30
16 
17 Point_1 of array2: 35, 40
18 
19 Deleting...
20 
21 Destructor called.
22 
23 Destructor called.
24 
25 Deleting... //接下来程序出现运行错误。

深层复制-自己定义的复制构造函数(运行正确)

 1 //例 对象的深层复制
 2 
 3 #include <iostream>
 4 
 5 #include <cassert>
 6 
 7 using namespace std;
 8 
 9 class Point { //类的声明略
10 
11 };
12 
13 class ArrayOfPoints {
14 
15 public:
16 
17   ArrayOfPoints(const ArrayOfPoints& pointsArray);
18 
19 //其他成员略
20 
21 };
22 
23   ArrayOfPoints::ArrayOfPoints(const ArrayOfPoints& v) {
24 
25     size = v.size;
26 
27     points = new Point[size];
28 
29     for (int i = 0; i < size; i++)
30 
31     points[i] = v.points[i];
32 
33   }
34 
35 int main() {
36 
37 //
38 
39 }

程序的运行结果如下

 1 Please enter the number of points:2
 2 
 3 Default Constructor called.
 4 
 5 Default Constructor called.
 6 
 7 Default Constructor called.
 8 
 9 Default Constructor called.
10 
11 Copy of pointsArray1:
12 
13 Point_0 of array2: 5, 10
14 
15 Point_1 of array2: 15, 20
16 
17 After the moving of pointsArray1:
18 
19 Point_0 of array2: 5, 10
20 
21 Point_1 of array2: 15, 20
22 
23 Deleting...
24 
25 Destructor called.
26 
27 Destructor called.
28 
29 Deleting...
30 
31 Destructor called.
32 
33 Destructor called.

posted @ 2021-02-25 15:17  `Konoha  阅读(89)  评论(0编辑  收藏  举报