Content deleted Content added
expanded it |
|||
(39 intermediate revisions by 33 users not shown) | |||
Line 1:
{{refimprove|date=August 2015}}
In [[computer science]], '''
==Shallow
In
Copying primitive types in Java or [[C++]]:
<syntaxhighlight lang="java">
int original = 42;
int copy =
copy = original;
</syntaxhighlight>
Many OOP programming languages (including [[Java (programming language)|Java]], [[D (programming language)|D]], [[ECMAScript]], and [[C Sharp (programming language)|C#]]) make use of object references. Object references, which are similar to pointers in other languages, allow for objects to be passed around by [[Pointer (computer programming)|address]] so that the whole object need not be copied.
A Java example, when "copying" an object using simple assignment:
<syntaxhighlight lang="java">
Object original = new Object();
Object copy = null;
copy = original▼
Object myObj = new Object();▼
copy = original; // does not copy object but only its reference
</syntaxhighlight>
The object is not duplicated, the variables 'original' and 'copy' are actually referring to the same object. In C++, the equivalent code
<syntaxhighlight lang="c">
Object* copy = NULL;
▲copy = original;
</syntaxhighlight>
makes it clear that it is a ''pointer'' to the object being copied, not the object itself.
==Cloning==▼
The process of actually making another exact replica of the object
Cloning an object in Java:
<syntaxhighlight lang="java">
Object originalObj = new Object();
Object copyObj = null;
copyObj = originalObj.clone(); // duplicates the object and assigns the new reference to 'copyObj'
</syntaxhighlight>→
C++ objects in general behave like primitive types, so to copy a C++ object one could use the '<code>=</code>' (assignment) operator. There is a default assignment operator provided for all classes, but its effect may be altered through the use of [[operator overloading]]. There are dangers when using this technique (see [[Object slicing|slicing]]). A method of avoiding slicing can be implementing a similar solution to the Java <code>clone()</code> method for the classes and using pointers. (There is no built-in <code>clone()</code> method.)
A C++ example of object cloning:
<syntaxhighlight lang="cpp">
Object originalObj;
Object copyObj(originalObj); // creates a copy of originalObj named copyObj
</syntaxhighlight>
A C++ example of object cloning using pointers (to avoid slicing see<ref>See Q&A at [http://en.allexperts.com/q/C-1040/constructor-virtual.htm en.allexperts.com] {{Webarchive|url=https://web.archive.org/web/20090718130949/http://en.allexperts.com/q/C-1040/constructor-virtual.htm |date=2009-07-18 }}</ref>):
<syntaxhighlight lang="cpp">
Object* originalObj = new Object;
Object* copyObj = nullptr;
copyObj = new Object(*originalObj); // creates a copy of originalObj and assigns its address to copyObj
</syntaxhighlight>
==References==
▲=Cloning=
{{reflist}}
▲The process of actually making another exact replica of the object, instead of just its reference, is called cloning. In most languages, the language or libraries can facilitate some sort of cloning. In Java, the Object class contains the clone() method, which copies the object and returns a reference to that copied object. Since it is in the Object class, all classes defined in Java will have a clone method available to the programmer. In C++, a simple memcpy() operation (part of the Standard Library) will copy the contents of the object into a memory space, thus cloning the object.
<!--Categories-->
[[Category:Object-oriented programming]]
|