내가메서드 호출의 복사본을 가지고하는 방법 - C++ 및 Java 차이를
struct Node {
int x;
Node(int x) : x(x) {}
friend std::ostream & operator << (std::ostream &o, const Node &n) {
o << n.x;
return o;
}
};
void Foo(Node n) {
n.x--;
cout << "Foo: " << n << endl;
}
void Foo2(Node &n) {
n.x--;
cout << "Foo2: " << n << endl;
}
int main() {
Node n(5);
cout << n << endl;
Foo(n);
cout << n << endl;
Foo2(n);
cout << n << endl;
return 0;
}
++ C의 몇 가지 코드를 가지고 ... 그리고 출력이
5
Foo: 4
4
Foo2: 3
4
입니다 ... 지금은 도달 Java에서 동일
class Node {
public int x;
Node(int x) {
this.x = x;
}
@Override
public String toString() {
return Integer.toString(x);
}
}
public class NodeHomevork {
static void Foo(Node n) {
n.x--;
System.out.println("Foo: " + n);
}
static void Foo2(Node n) {
Node n2 = new Node(n.x);
n2.x--;
System.out.println("Foo2: " + n2);
}
public static void main(String[] args) {
Node n = new Node(5);
System.out.println(n);
Foo(n);
System.out.println(n);
Foo2(n);
System.out.println(n);
}
}
그러나 Foo2에서 새 키워드를 사용하지 않고 Foo2를 구현하는 방법을 모르겠다. 아이디어가 있으면 어떤 게시물에 대해서도 고마워 할 것입니다. 감사합니다.
'Java'는 참조 유형 언어입니다. 변수를 만들 때'new'를 피할 방법이 없습니다. 'C#'는 값 유형이라는'struct'를 가지고 있습니다. 그것은 새로운 것을 사용하지 않고'struct' 변수를 만들 수 있음을 의미합니다. 반면에'C++ '은 값 타입 언어이며,'C++'퍼포먼스가 뛰어난 이유 중 하나는 값 타입에 대한 이중성입니다. – MRB
Possible [dupe] (http://stackoverflow.com/questions/869033/how-do-i-copy-an-object-in-java)? 그렇지 않은 경우, 관련성이 높습니다. 추가 할 수있는 유일한 것은 Java 참조에 의한 값 전달 만 존재한다는 것입니다. – George
'new '를 다른 곳으로 옮길 수 있습니다. 가장 깨끗한 해결책은'Node newInstanceFromExisting (Node node)'와 같은 정적 메소드를 클래스에 추가하는 것입니다. 'new'는'newInstanceFromExisting' 안에 있습니다. –