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.
c++中深层复制(浅层复制运行错误)成功运行-----sample的更多相关文章
- java数组对象的浅层复制与深层复制
实际上,java中数组对象的浅层复制只是复制了对象的引用(参考),而深层复制的才是对象所代表的值.
- Java中的Clone机制(浅层复制)
浅层复制代码: import java.util.*; class Int{ private int i; public Int(int ii){i = ii;} public void increm ...
- .net中String是引用类型还是值类型 以及 C#深层拷贝浅层拷贝
http://www.cnblogs.com/yank/archive/2011/10/24/2204145.html http://www.cnblogs.com/zwq194/archive/20 ...
- iOS 浅复制和深复制的深层理解,含示例
转载:https://www.zybuluo.com/MicroCai/note/50592 版权归 @MicroCai 所有 以下是正文: 浅复制就是指针拷贝:深复制就是内容拷贝. 集合的浅复制 ( ...
- java中浅层克隆和深层克隆
1.浅复制与深复制概念 浅复制(浅克隆) 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象 ...
- JAVA中浅复制与深复制 - coolmist - ITeye技术网站
body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...
- Java中引用的浅复制和深复制
Java中除了基本类型int,char,double等的赋值是按照值传递之外,其余的类型和对象都是按照引用进行传递的. 下面来看一个关于引用的例子. package referenceCopy;// ...
- c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程
c#Winform程序调用app.config文件配置数据库连接字符串 你新建winform项目的时候,会有一个app.config的配置文件,写在里面的<connectionStrings n ...
- Java中的浅复制和深复制 Cloneable clone
先看一个简单案例 public class Test { public static void main(String args[]) { Student stu1 = new ...
随机推荐
- 西南民族大学第十二届程序设计竞赛(同步赛) A.逃出机房 (bfs)
题意:有来两个人A和B,A追B,A和B每次向上下左右移动一个单位,一共有两扇门,问A是否可以追上B(在门口追上也算合法). 题解:当时看题意说在门口也算?就觉得是判断两个人到门口的时间,对他们两个人分 ...
- hdu517 Triple
Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submissio ...
- hdu5501 The Highest Mark
Problem Description The SDOI in 2045 is far from what it was been 30 years ago. Each competition has ...
- K8S(15)监控实战-ELK收集K8S内应用日志
K8S监控实战-ELK收集K8S内应用日志 目录 K8S监控实战-ELK收集K8S内应用日志 1 收集K8S日志方案 1.1 传统ELk模型缺点: 1.2 K8s容器日志收集模型 2 制作tomcat ...
- java-GUI编程学习总结
狂神说java-GUI编程学习总结 1.简介 2.AWT 2.1.实现如图1-2 (1)面向过程写法 (2)内部类写法 (3)完全改造成面向对象 3.Swing 3.1.鼠标花点 3.2.弹窗 3.3 ...
- 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 ,即为两个并列 ...
- 关于ucore实验一的资料查找
任务:阅读实验一makefile 搞清楚ucore.img是如何构建的 $@ $< $^ 这三个变量分别是什么意思 https://blog.csdn.net/YEYUANGEN/arti ...
- apache 解析漏洞(CVE-2017-15715)
在p牛博客最近更新的文章,传送门,感觉很有意思,自己在自己本地测试了一下 0x01 正则表达式中的 '$' apache这次解析漏洞的根本原因就是这个 $,正则表达式中,我们都知道$用来匹配字符串结尾 ...
- xss之htmlspecialchars
源代码: 可以看到是用htmlspecialchars 对get参数message进行处理,但是他默认不对单引号进行处理的. 只对预定义的字符进行处理: & (和号)成为 & &quo ...
- zsh & for loop bug
zsh & for loop bug for: command not found syntax error near unexpected token do' do' Unicode 编码 ...