입출력 연산자는 전역 함수로만 구현되는 이유

Seungsoo Lee·2022년 11월 12일
0

C Cpp

목록 보기
3/4

2가지 구현방법 (전역함수, 멤버함수)들중 멤버함수로 구현하게되면 생기는 문제...

A a(10);

std::cout << a;

여기서 멤버함수로 << 오버로딩을 구현한다면, 왼쪽 피연산자인 std::cout객체의 멤버함수 되어야한다.
그러면 연산자 오버로딩을 하기위해선, 우리가 std::cout이 선언되어있는 ostream클래스 내부에서 멤버함수를 구현해야하는데, ostream 클래스는 c++ 표준이므로 건들 수 없다.

결국 전역함수로 구현해야한다.

std::ostream& operator << (std::ostream &out, const Fixed &fixed)
{
  out << fixed.toFloat();
  return out;
}

마찬가지로 fixed의 private변수를 바로 가져다 사용하고싶으면 선언할때 friend class로 선언하면 된다.

https://ansohxxn.github.io/cpp/chapter9-3/#%EC%9E%85%EC%B6%9C%EB%A0%A5-%EC%97%B0%EC%82%B0%EC%9E%90%EB%8A%94-%EC%A0%84%EC%97%AD-%ED%95%A8%EC%88%98%EB%A1%9C%EB%A7%8C-%EA%B5%AC%ED%98%84%EB%90%98%EB%8A%94-%EC%9D%B4%EC%9C%A0

0개의 댓글