下面随笔给出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.

c++中深层复制(浅层复制运行错误)成功运行-----sample的更多相关文章

  1. java数组对象的浅层复制与深层复制

    实际上,java中数组对象的浅层复制只是复制了对象的引用(参考),而深层复制的才是对象所代表的值.

  2. Java中的Clone机制(浅层复制)

    浅层复制代码: import java.util.*; class Int{ private int i; public Int(int ii){i = ii;} public void increm ...

  3. .net中String是引用类型还是值类型 以及 C#深层拷贝浅层拷贝

    http://www.cnblogs.com/yank/archive/2011/10/24/2204145.html http://www.cnblogs.com/zwq194/archive/20 ...

  4. iOS 浅复制和深复制的深层理解,含示例

    转载:https://www.zybuluo.com/MicroCai/note/50592 版权归 @MicroCai 所有 以下是正文: 浅复制就是指针拷贝:深复制就是内容拷贝. 集合的浅复制 ( ...

  5. java中浅层克隆和深层克隆

    1.浅复制与深复制概念 浅复制(浅克隆)     被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象 ...

  6. JAVA中浅复制与深复制 - coolmist - ITeye技术网站

    body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...

  7. Java中引用的浅复制和深复制

    Java中除了基本类型int,char,double等的赋值是按照值传递之外,其余的类型和对象都是按照引用进行传递的. 下面来看一个关于引用的例子. package referenceCopy;// ...

  8. c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程

    c#Winform程序调用app.config文件配置数据库连接字符串 你新建winform项目的时候,会有一个app.config的配置文件,写在里面的<connectionStrings n ...

  9. Java中的浅复制和深复制 Cloneable clone

    先看一个简单案例 public class Test {     public static void main(String args[]) {         Student stu1 = new ...

随机推荐

  1. 西南民族大学第十二届程序设计竞赛(同步赛) A.逃出机房 (bfs)

    题意:有来两个人A和B,A追B,A和B每次向上下左右移动一个单位,一共有两扇门,问A是否可以追上B(在门口追上也算合法). 题解:当时看题意说在门口也算?就觉得是判断两个人到门口的时间,对他们两个人分 ...

  2. hdu517 Triple

    Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submissio ...

  3. hdu5501 The Highest Mark

    Problem Description The SDOI in 2045 is far from what it was been 30 years ago. Each competition has ...

  4. K8S(15)监控实战-ELK收集K8S内应用日志

    K8S监控实战-ELK收集K8S内应用日志 目录 K8S监控实战-ELK收集K8S内应用日志 1 收集K8S日志方案 1.1 传统ELk模型缺点: 1.2 K8s容器日志收集模型 2 制作tomcat ...

  5. java-GUI编程学习总结

    狂神说java-GUI编程学习总结 1.简介 2.AWT 2.1.实现如图1-2 (1)面向过程写法 (2)内部类写法 (3)完全改造成面向对象 3.Swing 3.1.鼠标花点 3.2.弹窗 3.3 ...

  6. Leetcode(13)-罗马数字转整数

    罗马数字包含以下七种字符:I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为两个并列 ...

  7. 关于ucore实验一的资料查找

    任务:阅读实验一makefile 搞清楚ucore.img是如何构建的 $@  $<  $^  这三个变量分别是什么意思 https://blog.csdn.net/YEYUANGEN/arti ...

  8. apache 解析漏洞(CVE-2017-15715)

    在p牛博客最近更新的文章,传送门,感觉很有意思,自己在自己本地测试了一下 0x01 正则表达式中的 '$' apache这次解析漏洞的根本原因就是这个 $,正则表达式中,我们都知道$用来匹配字符串结尾 ...

  9. xss之htmlspecialchars

    源代码: 可以看到是用htmlspecialchars 对get参数message进行处理,但是他默认不对单引号进行处理的. 只对预定义的字符进行处理: & (和号)成为 & &quo ...

  10. zsh & for loop bug

    zsh & for loop bug ​for: command not found syntax error near unexpected token do' do' Unicode 编码 ...