연산자 오버로딩
-
[overloading] operator <<개발/C·C++ 2021. 7. 28. 14:17
참고 C++ draft 연산자 오버로딩에 적용되는 규칙이 있습니다. 규칙과 관련해서 예제 몇 개를 작성해보겠습니다. Expression @a as member function #include class Position { private: int x; int y; public: Position() = default; Position(int x, int y) :x(x), y(y) {} Position operator-() const { return Position{ -x, -y }; } void print() const { std::cout
-
[객체의 복사와 대입 연산자] 의도하는 동작이 있다면 구현하라개발/C·C++ 2021. 4. 26. 12:02
primitive type이 자연스럽게 연산이 가능한 이유는 이미 구현되어 있기 때문입니다. = 연산자를 사용해 값을 초기화할수도 있고 복사도 할 수 있습니다. 우리는 그냥 사용하기만 하면 됩니다. 우리가 정의한 클래스도 초기화 하고 복사도 하며 대입도 됩니다. 복사와 대입 기능을 따로 구현한 적 없는데 되긴 됩니다. 친절은 여기까지입니다. 컴파일러가 자동으로 수행해주는 복사와 대입은 값 복사만 해줍니다. 만약 동적으로 메모리를 할당한 포인터 변수가 있다면 값 복사는 매우 치명적인 오류의 원인이 됩니다. 객체가 여러 개인데 그 객체의 포인터가 가리키는 메모리가 한 곳이라고 생각해보세요. 끔찍합니다. 어느 한 객체의 포인터 변수만 해제가 되어도 나머지 객체의 포인터 변수는 dangling pointer가 ..