자크님탑갱좀요
16
2021-11-24 19:02:54
2
85

c++에서 인스턴스를 리턴할 때 궁금한 점이 있습니다.



#include <iostream>
class Vector2D {
    int x, y;
public:
    Vector2D(int x, int y) : x(x), y(y) {}
    
    int get_x(){
        return x;
    }
    int get_y(){
        return y;
    }
};
Vector2D operator+(Vector2D& a, Vector2D& b){
    int x1 =0, x2 =0;
    Vector2D result(x1,x2);
    x1 = a.get_x() + b.get_x();
    x2 = a.get_y() + b.get_y();
    return result;
}
std::ostream& operator<<(std::ostream& os, Vector2D& a){
    os << a.get_x() << ',' << a.get_y();
    return os;
}

int main() {
    Vector2D v1(10, 2), v2(20, 5);
    std::cout << v1+v2 << std::endl; // 30, 7 출력을 원함
}


return result; 를 해줄때 return 값은 x1 에 30 x2에 7이 들어간 Vector2D 클래스의 객체로 이해하고 있습니다.


하지만 이렇게 cout하면 

Invalid operands to binary expression ('std::__1::ostream' (aka 'basic_ostream<char>') and 'Vector2D')


오류가 발생하는 데 v3  인스턴스를 새로 만들고 v3 = v1+v2 를 한 뒤

v3를 cout하면 오류가 발생하지 않고 출력이 잘 되더라구요.



그럼 궁금한 점이


1. return result; 코드로 함수에 반환된것은 무언인가요??? 이름이 없는 인스턴스가 반환된 것인가요???


2. 꼭 std::cout<<v1+v2; 을 하고 싶다면 어떻게 할 수 있을까요??

1
  • 답변 2

  • 제발제발제발
    42
    2021-11-24 19:25:24

    x1 = a.get_x() + b.get_x() 여기서 x1은 int x1 의 x1이고

    result의 x1에 저장하려면 result.x1 = a.get_x() + b.get_x() 이렇게 해야하지 않을까요?

    아니면 x1 = a.get_x() + b.get_x() 이걸 한 후에 vector2d result(x1,x2)를 선언하시는게 맞는 것 같습니다

  • 자크님탑갱좀요
    16
    2021-11-24 19:34:09

    Vector2D& operator+(Vector2D& a, Vector2D& b){

        int x1 =0, x2 =0;

        x1 = a.get_x() + b.get_x();

        x2 = a.get_y() + b.get_y();

        Vector2D static result(x1,x2);

        return result;


    이렇게 수정하니 오류가 사라졌습니다.

    생성자를 x1,x2에 더하기과정을 끝낸 후 넣어주었고

    static으로 지역변수 result가 사라지지 않도록 해주었더니 출력이 잘됩니다.!!!

  • 로그인을 하시면 답변을 등록할 수 있습니다.