Copy constructors :
- provide an attractive alternative to the rather pathological clone method
- are easily implemented
- simply extract the argument's data, and forward to a regular constructor
- are unnecessary for immutable objects
Example
public final class Galaxy {
public Galaxy (double aMass, String aName) {
fMass = aMass;
fName = aName;
}
public Galaxy(Galaxy aGalaxy) {
this(aGalaxy.getMass(), aGalaxy.getName());
}
public static Galaxy newInstance(Galaxy aGalaxy) {
return new Galaxy(aGalaxy.getMass(), aGalaxy.getName());
}
public double getMass() {
return fMass;
}
public void setMass( double aMass ){
fMass = aMass;
}
public String getName() {
return fName;
}
private double fMass;
private final String fName;
public static void main (String... aArguments){
Galaxy m101 = new Galaxy(15.0, "M101");
Galaxy m101CopyOne = new Galaxy(m101);
m101CopyOne.setMass(25.0);
System.out.println("M101 mass: " + m101.getMass());
System.out.println("M101Copy mass: " + m101CopyOne.getMass());
Galaxy m101CopyTwo = Galaxy.newInstance(m101);
m101CopyTwo.setMass(35.0);
System.out.println("M101 mass: " + m101.getMass());
System.out.println("M101CopyTwo mass: " + m101CopyTwo.getMass());
}
}
Example run of this class :
>java -cp . Galaxy
M101 mass: 15.0
M101Copy mass: 25.0
M101 mass: 15.0
M101CopyTwo mass: 35.0
This article originates from http://www.javapractices.com/topic/TopicAction.do?Id=12
分享到:
相关推荐
在C++编程语言中,复制构造函数(Copy Constructor)和赋值运算符(Assignment Operator)是两个非常关键的概念,特别是在处理对象的拷贝和赋值时。它们默认由编译器提供,但通常需要根据具体需求进行自定义,以确保正确...
复制构造函数在C++中涉及到两种复制类型:浅复制(shallow copy)和深复制(deep copy)。浅复制仅仅复制对象的指针,导致多个对象指向相同的内存区域,这在复制包含指针的复杂对象时会引起问题。深复制则复制指针所...
Classes Doing Work in Constructors Default Constructors Explicit Constructors Copy Constructors Structs vs. Classes Inheritance Multiple Inheritance Interfaces Operator Overloading Access Control ...
Copy constructors, assignment operators, and exception safe assignment, How to use tags, Converting numbers to strings and strings to numbers, How To: Ask Questions The Smart Way ), Forum( 说明:...
2. **拷贝构造函数(Copy Constructors)**: - 如果用户未定义拷贝构造函数,编译器会合成一个。有两种类型:trivial和nontrivial。 - Trivial拷贝构造函数进行逐位复制,适用于内置类型。 - 非trivial拷贝构造...
明确的构造函数(Explicit Constructors)防止了不必要的类型转换,拷贝构造函数(Copy Constructors)负责对象的浅拷贝。 结构体(Structs)和类(Classes)虽然在C++中非常相似,但它们在成员访问权限上有所不同...
Understand the importance of immutability, copy constructors, and lenses Develop a backend API with Vapor Create an iOS app by combining FP, OOP, FRP, and POP paradigms In Detail Swift is a multi-...
- 拷贝构造函数(Copy Constructors):拷贝构造函数用于创建一个新对象作为现有对象的副本,应当注意避免浅拷贝问题。 - 结构体与类(Structs vs. Classes):结构体和类在C++中本质上是相同的,但默认的访问控制...
- **Copy Constructors**:深拷贝与浅拷贝的选择依据是对象是否包含指针或引用类型的成员变量。深拷贝可以避免对象间数据意外共享的问题。 - **Structs vs. Classes**:结构体(struct)通常用于表示简单数据类型,而...
- **Copy Constructors**:深拷贝与浅拷贝的选择,以及正确实现复制构造函数。 - **Structs vs. Classes**:根据数据封装需求选择struct或class。 - **Inheritance**:继承的适当使用与滥用的避免。 - **Multiple ...
Understand the importance of immutability, copy constructors, and lenses Develop a backend API with Vapor Create an iOS app by combining FP, OOP, FRP, and POP paradigms In Detail Swift is a multi-...
- **复制构造函数(Copy Constructors)**:为类提供复制构造函数以处理对象的深拷贝和浅拷贝问题。 - **赋值运算符(Operator=)**:实现赋值运算符时,遵循自赋值安全原则,并确保正确处理资源管理。 4. **谷歌经验...
#### Copy Constructors(拷贝构造函数) - 分析拷贝构造函数的必要性,特别是在资源管理方面的作用。 #### Structs vs. Classes(结构体与类的区别) - 对比结构体与类在内存布局、默认访问权限等方面的差异,...
15. **Copy Constructors**:复制构造函数应处理深拷贝和浅拷贝问题,遵循“Rule of Three”。 16. **Structs vs. Classes**:根据数据封装程度选择struct或class,struct默认为public,class默认为private。 17. ...
- **Copy Constructors**: 深拷贝与浅拷贝的区别及何时使用。 - **Struct vs. Classes**: 在C++中,struct和class的主要区别在于默认的访问级别,struct默认为public而class默认为private。 - **Inheritance**: ...
- **Copy Constructors**:深拷贝和浅拷贝的区别以及何时使用哪种拷贝方式是重要的考虑因素。 - **Structs vs. Classes**:结构体(struct)和类(class)在C++中有不同的默认访问级别,应根据实际需求选择合适的...
- **Copy Constructors**:拷贝构造函数用于复制对象时创建新对象。 - **Structs vs. Classes**:在C++中,struct和class的主要区别在于默认访问级别不同。struct的默认访问级别为public,而class的默认访问级别为...