Vector operator=(Vector v)
{
x=v.x;
y=v.y;
return *this;
}
----------------------------------------
Vector operator=(Vector v)
{
Vector a=0;
a.x = v.x;
a.y = v.y;
return a;
}
v1(1, 2), v2(3, 5), v3(6, 4);
라고 한다면
v1 = v2 = v3; 를 할 시에
위의 코드는 6, 4가 뜨고 밑의 코드는 1, 2가 뜨는데
왜 그런거야;;?
-----------------------------------------
추가적으로 더하기 연산자를 쓸 때는
Vector operator+(Vector v)
{
Vector a=0;
a.x = x + v.x;
return a;
}
Vector operator+(Vector v)
{
x = x + v.x;
return *this;
}
가 똑같은 값을 출력하는데
이해가 안되는거야 이거땜ㅅ;;
{
x=v.x;
y=v.y;
return *this;
}
----------------------------------------
Vector operator=(Vector v)
{
Vector a=0;
a.x = v.x;
a.y = v.y;
return a;
}
v1(1, 2), v2(3, 5), v3(6, 4);
라고 한다면
v1 = v2 = v3; 를 할 시에
위의 코드는 6, 4가 뜨고 밑의 코드는 1, 2가 뜨는데
왜 그런거야;;?
-----------------------------------------
추가적으로 더하기 연산자를 쓸 때는
Vector operator+(Vector v)
{
Vector a=0;
a.x = x + v.x;
return a;
}
Vector operator+(Vector v)
{
x = x + v.x;
return *this;
}
가 똑같은 값을 출력하는데
이해가 안되는거야 이거땜ㅅ;;
꺼져 시발
ㄴㅠㅠ...;;;
a가 리턴되서 어디로 가는데?
ㄴ 형 내가 진짜 프로그래밍 초짜중의 초짜라서;; 기본서는 정독했지만 그래도 이 부분부턴 막혀... 조금 가르침을 주라..;
위의 메소드는 객체의 상태를 바꾸지만 밑의 메소드는 새로운 객체를 반환함. 대입문은 기본적으로 변수와 객체의 상태를 바꿔야 하기 때문에 위의 코드가 맞지요.
사족을 달자면 v1 = v2 = v3; 은 컴파일러에 의해 v1.operator=(v2.operator=(v3)); 의 메소드 호출 형식으로 변환된다.
라는구나
그리고 혹시나 해서 하는 말인데 아래꺼와 같은 함수를 쓰고 싶다면 vector *a = new vector (0) 이런 식으로 써야 한다. vector a; 로 하면 return 하는 순간 메모리 할당이 없어지거든.
추가된 질문에 답변하자면, 결과는 똑같이 나오겠지만 두번째 메소드의 경우 계산 후의 v1, v2의 값이 바뀌어 있을꺼임
첫번째꺼는 v1, v2가 v3을 참조하게 되서 다 같은 값을 가지게 될테고. 두번째꺼는 v1,v2,v3 다 값이 그대로일듯.
대입 연산자의 리턴형은 그 객체의 참조형이라는 것을 배우지 않았느냐
추정입니다. Vector operator=(const Vector &v) 가 아니라 Vector operator=(Vector v) 로 정의 했기 때문에 컴파일러가 자동으로 기본 복사 대입연산자 Vector operator=(const Vector &v) 를 하나더 만든다고 추정합니다. 원래 대입 연산자 = 는 정의 하지 않아도 컴파일러가 자동으로 기본형으로 생성함. 그럼, 두개의 = 연산자중 어떤게 작동할거이냐는 문제인데요 그건 몰겠슴. + 연산자는 자동으로 생성안됨.