fbpx
维基百科

克隆 (编程)

计算机科学中,“克隆”指对一个对象制作一个完全相同的副本,其常常在基于原型编程中的编程范型或者面向对象程序设计(OOP)中用到。

浅拷贝 编辑

在大多数编程语言中(但除了:Ruby等一些语言),例如doublefloatintlong等一些原始型別仅仅将它们的值存储于计算机内存中的某处(通常为调用栈中)。给它进行一次简单赋值,你可以将变量的内容复制到另外一个变量中:

在Java或C++中进行基本类型的复制:

int original = 42; int copy = 0; copy = original; 

许多OOP编程语言(包括JavaD語言ECMAScriptC♯)利用对象引用。对象引用与其他语言中的指针类似,其使得对象可以被指针所传递而完整的对象不被复制。

以下是在Java语言中的范例,当使用简单赋值“拷贝”一个对象时:

Object original = new Object(); Object copy = null; copy = original; // 不复制对象仅仅复制其引用 

这段代码并没有复制对象,变量“original”与“copy”实际上指向相同的对象。在C++中,以下是相同效果代码:

Object* original = new Object(); Object* copy = NULL; copy = original; 

这段代码指明复制对象的是一个“指针”,而非对象本身。

克隆过程 编辑

制造与对象相同的一个副本而非仅仅制造它的引用的过程被称为克隆。在大多数编程语言中,编程语言和库可以便利一些克隆的过程。在Java语言中,Object类包含了clone()方法英语Clone (Java method),此方法仅仅复制对象并返回一个指向被复制对象的引用。由于此方法位于Object类中,程序员得以在所有定义于Java的类中使用克隆方法(虽然为了正常使用,其需要根据其应用于不同的层级进行改写)。

在Java语言中进行对象的克隆:

Object originalObj = new Object(); Object copyObj = null; copyObj = originalObj.clone(); // 复制对象并分配一个指向“copyObj”的引用 

一般而言,C++中的对象像基本类型一样运行,所以复制一个C++对象可以使用“=”(分配)赋值运算符。C++语言中所有的类中存在一个默认的赋值运算符,但其效果可能被运算符重载所影响。使用此方法时可能存在危险(参见对象切片英语Object slicing)。防止对象切片的方法的方法之一是使用与Java所有的类中的clone()方法来实现,并使用指针(请注意C++中不存在自带的clone()方法)。

C++中对象克隆的示例:

Object originalObj; Object copyObj(originalObj); // 创建名为copyObj的originalObj拷贝 

C++中使用指针进行对象克隆的示例(防止对象切片请参见[1]):

Object* originalObj = new Object; Object* copyObj = nullptr; copyObj = new Object(*originalObj); // 创建originalObj的拷贝并将其地址分配给copyObj 

参考文献 编辑

  1. ^ 参见en.allexperts.com (页面存档备份,存于互联网档案馆)的问答(Q&A)部分

克隆, 编程, 此條目需要补充更多来源, 2020年4月4日, 请协助補充多方面可靠来源以改善这篇条目, 无法查证的内容可能會因為异议提出而被移除, 致使用者, 请搜索一下条目的标题, 来源搜索, 网页, 新闻, 书籍, 学术, 图像, 以检查网络上是否存在该主题的更多可靠来源, 判定指引, 此條目介紹的是计算机编程学中的克隆, 关于其他用法, 请见, 克隆, 消歧义, 在计算机科学中, 克隆, 指对一个对象制作一个完全相同的副本, 其常常在基于原型编程中的编程范型或者面向对象程序设计, 中用到, 浅拷贝, 编辑在. 此條目需要补充更多来源 2020年4月4日 请协助補充多方面可靠来源以改善这篇条目 无法查证的内容可能會因為异议提出而被移除 致使用者 请搜索一下条目的标题 来源搜索 克隆 编程 网页 新闻 书籍 学术 图像 以检查网络上是否存在该主题的更多可靠来源 判定指引 此條目介紹的是计算机编程学中的克隆 关于其他用法 请见 克隆 消歧义 在计算机科学中 克隆 指对一个对象制作一个完全相同的副本 其常常在基于原型编程中的编程范型或者面向对象程序设计 OOP 中用到 浅拷贝 编辑在大多数编程语言中 但除了 Ruby等一些语言 例如double float int long等一些原始型別仅仅将它们的值存储于计算机内存中的某处 通常为调用栈中 给它进行一次简单赋值 你可以将变量的内容复制到另外一个变量中 在Java或C 中进行基本类型的复制 int original 42 int copy 0 copy original 许多OOP编程语言 包括Java D語言 ECMAScript和C 利用对象引用 对象引用与其他语言中的指针类似 其使得对象可以被指针所传递而完整的对象不被复制 以下是在Java语言中的范例 当使用简单赋值 拷贝 一个对象时 Object original new Object Object copy null copy original 不复制对象仅仅复制其引用 这段代码并没有复制对象 变量 original 与 copy 实际上指向相同的对象 在C 中 以下是相同效果代码 Object original new Object Object copy NULL copy original 这段代码指明复制对象的是一个 指针 而非对象本身 克隆过程 编辑制造与对象相同的一个副本而非仅仅制造它的引用的过程被称为克隆 在大多数编程语言中 编程语言和库可以便利一些克隆的过程 在Java语言中 Object类包含了clone 方法 英语 Clone Java method 此方法仅仅复制对象并返回一个指向被复制对象的引用 由于此方法位于Object类中 程序员得以在所有定义于Java的类中使用克隆方法 虽然为了正常使用 其需要根据其应用于不同的层级进行改写 在Java语言中进行对象的克隆 Object originalObj new Object Object copyObj null copyObj originalObj clone 复制对象并分配一个指向 copyObj 的引用 一般而言 C 中的对象像基本类型一样运行 所以复制一个C 对象可以使用 分配 赋值运算符 C 语言中所有的类中存在一个默认的赋值运算符 但其效果可能被运算符重载所影响 使用此方法时可能存在危险 参见对象切片 英语 Object slicing 防止对象切片的方法的方法之一是使用与Java所有的类中的clone 方法来实现 并使用指针 请注意C 中不存在自带的clone 方法 C 中对象克隆的示例 Object originalObj Object copyObj originalObj 创建名为copyObj的originalObj拷贝 C 中使用指针进行对象克隆的示例 防止对象切片请参见 1 Object originalObj new Object Object copyObj nullptr copyObj new Object originalObj 创建originalObj的拷贝并将其地址分配给copyObj参考文献 编辑 参见en allexperts com 页面存档备份 存于互联网档案馆 的问答 Q amp A 部分 取自 https zh wikipedia org w index php title 克隆 编程 amp oldid 71539741, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。