title: “C++ 17. 삽입,추출 연산자” categories:

  • CspecialCharspecialChar

    #C++ 17. 삽입,추출 연산자 : 네이버 블로그

출력 스트림에서 데이터를 출력하는 «연산자를 삽입 연산자라 하고

입력 스트림에서 데이터를 입력하느 »연산자를 추출 연산자라 한다

이 연산자들은 iostream 에 정의되어 있으며 가상 함수이기 때문에 사용자가 직접 변경할 수 있다

먼저 사용자 삽입 연산자에 대해 알아보자

사용자 삽입 연산자를 사용하기 위해서는 operator가 필요하다

ostream& operator « (ostream& stream,입력){

stream«입력;

return stream;

}

위는 사용자 삽입 연산자 정의의 기본적인 형태이다

만약 입력이 객체라면 객체의 맴버를 스트림에 삽입 할 수 있다

즉 point라는 클래스가 있고 x,y맴버를 가지고 있다 하자

그럼

ostream& operator « (ostream& stream, point a){

stream«a.x«a.y;

return stream;

}

라는 사용자 삽입 연산자를 정의할 수 있다

물론 스트림에 직접 문자열이나 문자를 입력할 수 도 있다

ex) stream« ’(‘ « a.x « ’,’ « a.y« ’)’;

이후 «연산자를 사용하는 방법은

point 객체 a가 있으면

cout« a;를 하면 된다

마찬가지로 사용자 추출 연산자는

istream& operator » (istream& stream, 출력){

stream»출력;

return stream;

}

의 형식으로 쓸 수 있다

이를 이용해 point를 받는 사용자 추출 연산자를 정의하면

istream& operator » (istream& stream, point &a){

cout« “x »”;

stream»a.x;

cout« “y »”;

stream»a.y;

return stream;

}

중요한 점은 매개변수가 point &a, 즉 주소를 받음으로서 함수 내에서 변경되면 외부의 객체도 변경된다

이점을 활용해 point 객체에 데이터를 쓸 수 있다

위의 예시들과 마찬가지로 사용자 조작자 또한 만들 수 있다

조작자는 «나 »을 통해 실행된다

즉 삽입 연산자는 ostream, 추출 연산자는 istream을 사용하는 점을 주의하며 사용자 조작자를 만들어야 한다

예시로 출력스트림에 endlendl조작자를 만든다고 하면

ostream& endlendl(ostream& stream){

stream«‘\n’«‘\n’;

return stream;

}

으로 정의 할 수 있다

마찬가지로 입력 스트림을 이용해서 조작자를 만들 수 있다

이름을 물어보는 question 조작자를 만들어보자

istream& question(istream& stream){

cout«“이름?”;

return stream

}

다양한 방법으로 입출력을 정의 할 수 있다

업데이트: