C++ 입출력
C++에서 입출력은 처리하는 문장이 없는 대신 IO와 다양한 기능을 제공하는 표준 라이브러리를 제공한다고 책에서 얘기한다. 여기서 궁금한 점은 다른 언어들은 입출력을 처리하는 문장이 있는지 궁금하다. 책에서 말하는 문장이라는 것이 함수를 말하는 건가? 그렇다면 (C언어에서는 printf()함수를 예로 들 수 있을 것 같다.)
C++에서 제공하는 표준 라이브러리는 iostream라이브러리를 사용한다. iostream은 istream(inputstream), ostream(outstream)으로 나뉜다.
C++ 출력
여기서 출력을 위해 출력연산자 <<을 사용하고 2개의 피연산자를 가진다. 왼쪽의 피연산자는 ostream 객체, 오른쪽 피연산자는 출력할 값을 나타낸다. 이 출력연산자의 결과는 ostream이다.
std::cout << "Hello, world" << std::endl;
(std::cout << "Hello, world") << std::endl;
/* 3번 라인에서 괄호의 연산이 끝난 후 */ std::cout << std::endl;
위의 코드의 예시는 << 연산자를 중첩해서 사용할 수 있다는 것을 보여주고 있다. 1번 라인의 연산은 3번 라인처럼 첫 번째 출력연산을 끝내고 난 뒤에 다음 출력연산을 진행한다. endl은 조작자라고 하는데, 아직까지 조작자가 무엇인지 정확하게 모른다. C언어에서 '\n'같은 이스케이프 문자 같은 것 같다.
C++ 입력
입력을 위해서는 위에 출력연산자처럼 >>입력연산자를 사용해야 한다. 왼쪽의 피연산자는 istream 객체, 오른쪽 피연산자는 객체를 나타낸다. 객체에 대해서 살짝 들어보긴 했는데, 여기서 변수라고 하지 않는 것을 보니 변수보다는 큰 범위(클래스)까지도 입력에 넣을 수 있는 것 같아 보인다. 아직 클래스에 대해서 명확하게 정의하는 것은 나중에 나올 것 같다.
입력연산자의 결과도 왼쪽의 피연산자인 istream이다.
std::cin >> v1 >> v2;
(std::cin >> v1) >> v2;
/* 3번 라인 괄호 연산 진행 후 */std::cin >> v2;
1번 라인의 결과와 3번 라인의 결과가 동일하다.
"std::"??
std::가 무엇인지 궁금해질 것 같은데, 일단 std는 'std'라는 네임스페이스 안에 정의했다는 뜻이라고 한다. 아직 네임스페이스가 뭔지를 모르겠지만, 라이브러리에서 정의한 것과 같은 이름을 사용할 때, 이름 충돌을 피하기 위해 사용한다고 한다. '::'은 범위지정 연산자로 어떤 네임스페이스에 있는 무엇을 사용하기 위해 사용하는 연산자이다. ::는 C언어에서 구조체에서 멤버변수를 사용하기 위한 . 연산자 같다 (예를 들면 person 구조체에 name 멤버변수를 나타내기 위한 person.name처럼)
std::coud //std 네임스페이스 안에 정의한 cout을 사용하겠다는 의미
결론 및 생각
C++에서 입출력은 iostream 라이브러리를 사용하고 <<, >>와 같은 입/출력연산자를 사용한다. 입/출력연산자는 2개의 피연산자를 받고 결과로는 왼쪽 피연산자인 i/ostream을 반환(?)하므로 연산자를 중첩적으로 사용해서 출력이나 입력을 여러 개 할 수 있는 것을 알게 되었다.
추가적으로 네임스페이스와 조작자가 정확하게 어떤 것인지 궁금하다.
'C++ > C++ 기본' 카테고리의 다른 글
[C++] 공부하다가 궁금한 것(new, new[], delete, delete[]) (0) | 2024.04.05 |
---|---|
[C++] 0.시작 (2) | 2023.12.23 |
댓글