소스파일을 만들었으니 가장 먼저 "Hello World"를 입력과 출력을 해보겠습니다.
C언어에서 stdio.h의 scanf()(또는 scanf_s())와 printf()를 사용했습니다.
그냥 사용해도 에러는 발생하지 않습니다.
#include <stdio.h>
#define ARRAY_SIZE 20
int main()
{
char str[ARRAY_SIZE];
scanf_s("%[^\n]", &str, ARRAY_SIZE);
printf("%s \n", str);
return 0;
}
하지만 새롭게 C++을 배우기 때문에 C++ 표준 라이브러리를 사용하겠습니다.
C++에서 새롭게 등장하는 iostream(Input/Output Stream)은 표준 라이브러리 중 하나입니다.
#include <stdio.h>
이 표준 라이브러리를 포함해서 다시 Hello World를 입력받고 출력해보겠습니다.
#include <iostream>
#define ARRAY_SIZE 20
int main()
{
char str[ARRAY_SIZE];
std::cin.getline(str, ARRAY_SIZE);
std::cout << str << std::endl;
return 0;
}
결과는 위의 scanf()(또는 scanf_s())와 printf()를 사용한 결과와 같습니다.
이제 하나씩 알아보겠습니다.
먼저 std(standard의 약어)는 네임스페이스(namespace)입니다.
네임스페이스란 C++로 넘어오면서 굉장히 방대한 양의 식별자들이 나오게 되고 중복이 되는 상황이 발생하게 되면 구분을 할 수 없는 경우가 생깁니다. 이를 해결하기 위해서 나온 개념입니다.
변수, 함수등의 소속된 영역을 정의해주는 역할입니다.
std::cin.getline(str, ARRAY_SIZE);
위의 코드는 std의 소속된 cin을 사용한다는 뜻입니다. ( ::은 스코프 분석 연산자)
다음으로 입출력을 도와주는 cin과 cout입니다.
cin과 cout는 함수가 아닌 객체입니다.
살짝만 보들여다보면 C++은 객체 지향 언어입니다.
객체 지향 언어의 특징으로 C언어에서는 사용하지 않았던 클래스(class)라는 개념이 추가되었습니다.
C++에서 객체는 속성과 동작들을 하나로 묶은 것입니다.
클래스는 객체를 정의해주는 수단입니다. 그래서 클래스 변수들을 객체라고 부릅니다.
보통 클래스를 붕어빵틀, 객체를 붕어빵으로 많이들 비유하십니다.
틀은 한개만 있어도 여러 개의 붕어빵을 만들 수 있기 때문입니다.
cin을 정의한 클래스는 istream이고 cout을 정의한 클래스는 ostream입니다.
cin은 scanf()와 다르게 포맷이 필요 없습니다.
예를 들어 정수를 입력받고 싶다면
#include <iostream>
int main()
{
int num;
std::cin >> num;
return 0;
}
여러 개를 동시에 입력받고 싶다면
#include <iostream>
int main()
{
int num1,num2,num3;
std::cin >> num1 >> num2 >> num3;
return 0;
}
변수만 >>(입력 연산자) 뒤에 입력해주면 됩니다.
std::cin.getline(str, ARRAY_SIZE);
위의 예제에서 getline()은 cin의 멤버 함수입니다.
문자열을 입력받을 때 cin도 기본적으로는 scanf()처럼 공백을 받지 않습니다. 하지만 getline()을 사용하면 \n(엔터)이 입력될때까지 모든 문자열을 입력받을 수 있습니다.
원형은 다음과 같습니다.
getline(_Elem *_Str, streamsize _Count)
첫 번째 인자는 입력받은 문자열을 저장할 배열이고 두 번째 인자는 배열의 크기입니다.
cout도 printf()와 다르게 포맷이 필요 없습니다.
<<(출력 연산자)뒤에 출력할 값만 입력하면 됩니다.
#include <iostream>
int main()
{
int num1=1,num2=2;
std::cout << "num1 = " << num1 << std::endl << "num2 = " << num2;
return 0;
}
endl은 출력이 끝났으니 다음 줄(개행)로 넘어가라는 의미입니다.
다음처럼 수정해도 같은 결과를 볼 수 있습니다.
std::cout << "num1 = " << num1 << "\n" << "num2 = " << num2;
하지만 endl과 \n은 자세히 들여다보면 중요한 차이점이 있습니다.
endl는 다음 줄로 넘기기만 하는게 아니라 내부 버퍼를 비워주는 역할도 수행합니다.
\n은 단순 개행만 수행합니다. 그래서 endl이 더 무겁습니다.
'공부 자료실 > C++' 카테고리의 다른 글
C++ - 클래스(class) 생성자와 소멸자 (0) | 2020.08.19 |
---|---|
C++ - string 클래스 (0) | 2020.08.18 |
C++ - 클래스(Class)의 구조와 접근 지정자 (0) | 2020.08.17 |
C++ - 네임스페이스(namespace) (0) | 2020.08.13 |
C++ - 프로젝트 생성 (0) | 2020.08.11 |
댓글