C++(4) - 스트림

MINO·2024년 3월 12일
0

C++

목록 보기
4/5
post-thumbnail

스트림

키보드와 화면, 파일 등의 다양한 다른 장치를 동일하게 취급하기 위하여 도입된 추상적인 메커니즘.
istream 클래스와 ostream 클래스로 나뉘며, 표준 라이브러리인 iostream 을 통해 제공된다.

  • cin : istream 클래스의 객체
  • cout : ostream 클래스의 객체

입출력 스트림

C++에서 입출력을 위해 cin 과 >> , cout 과 << 를 사용해왔다.
C 의 printf 와는 다르게 데이터 형에 구애받지 않고 사용할 수 있어 편했는데, 이제 그 이유를 알게 되었다.

  • 추출 연산자 (extraction operator) : istream 클래스에서 입력 작업을 위해 >> 연산자를 오버로드
  • 삽입 연산자 (insertion operator) : ostream 클래스에서 표준 출력에 문자와 숫자를 전송하게끔 << 연산자를 오버로드

삽입 연산자 오버로드

새로 정의한 클래스를 >> 연산자를 오버로드할 수도 있다.

#include <iostream>
...
class Car {
	...
    friend ostream& operator<<(ostream& out, Car& c);
};

...

ostream& operator<<(ostream& out, Car& c)
{
	out << "차량 번호 " << num << " : " << ", 연료량 : " << gas;
    return out;
}

...
int main()
{
	Car mycar(1234, 20.5);
    cout << mycar;
}

출력 결과

차량 번호 : 1234 , 연료량 20.5


istream 클래스의 get() 함수

<< 연산자를 통해, 공백이 포함된 문자열을 입력하면 공백 이후 문자가 저장되지 않는다. << 연산자에는 공백 문자를 읽는 기능이 없기 때문이다.

  • get( ) 멤버 함수 : 공백 문자 혹은 하나의 문자를 읽어들이는 함수
  • put( ) 멤버 함수 : get( ) 과 짝을 이뤄 문자 하나를 출력하는 함수
#include <iostream>
using namespace std;

int main()
{
	char ch;
    cout << "영문자를 입력하십시오.\n";
    
    while(cin.get(ch)) // 한 문자씩 읽어들인다.
		cout.put(ch); // 한 문자씩 출력한다.

	return 0;
}

ostream 클래스의 멤버 함수

  • width( ) : width( ) 함수를 통해 출력 폭을 지정할 수 있다.
    만약, 출력할 문자열이나 숫자의 길이가 지정된 출력 폭 보다 긴 경우에는 출력할 대상의 길이에 맞추어서 출력된다.
#include <iostream>
using namespace std;

int main()
{
	for(int i=0;i<=10;++i)
	{
    	cout.width(3); // 출력 폭을 3으로 지정
        cout << i;
	}
    
    return 0;
}
  • fill( ) : width( )함수를 사용하여 출력 폭을 지정했을 경우, 문자열이 출력 폭보다 짧다면 빈 공간은 공백 문자로 채워진다.
    이때, fill( ) 함수를 통해 공백 문자 대신 특정 문자로 채울 수 있다.
#include<iostream>
using namespace std;

int main()
{
	for(int i=0;i<=10;++i)
    {
    	cout.width(3);
        cout.fill('-');
        cout << 1;
	}
    
    return 0;
}
  • precision( ) : 부동 소수점 숫자를 출력할 때, precision( ) 함수를 사용하여 자릿수(정밀도)를 지정할 수 있다.
#include <iostream>
using namespace std;

int main()
{
	double pi = 3.141592;
    int num = 3;
    
    cout.precision(num); //출력할 소수점의 자릿수를 지정
    cout << "원주율은 " << pi << "입니다.\n";
    
    return 0;
}

출력 결과

원주율은 3.14입니다.


조정자

출력 형식을 사용자가 원하는대로 지정할 수 있게 하는 함수

  • 진법 조정자 : 10진수 이외의 표기법으로 숫자 값을 출력할 수 있다.
    - dec (10진법), oct (8진법) , hex (16진법)
#include <iostream>
using namespace std;

int main()
{
	cout << dec << 10 << '\n'; // 10
    cout << oct << 10 << '\n'; // 12
    cout << hex << 10 << '\n'; // a
    
    return 0;
}
  • 개행 문자 (endl) : 줄 바꿈 시 사용하는 '\n' 대신 사용하는 endl 도 조정자다.

  • setw( ) 조정자 : 출력 폭을 지정할 수 있다. (width 함수와 동일한 서식 )

#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
	for(int i=0;i<=10;++i)
    	cout << setw(3) << i;

	return 0;
}

정리

이전 포스팅에서 언급한 얕은 복사와 깊은 복사, 앞으로 C++ 을 사용하며 생기는 궁금증이나 새로 알게된 기능들을 까먹지 않게 꾸준히 포스팅 해야겠다.

profile
안녕하세요 게임 개발하는 MINO 입니다.

0개의 댓글