1. C++ Hello World!
#include <iostream>
int main()
{
std::cout << "Hello World!" << std::endl;
return 0;
}
위의 예제코드를 간단히 설명하면 아래와 같이 요약할 수 있다.
std
는 네임스페이스 std 사용을 위한 선언::
는 범위 지정 연산자 또는 스코프 설정 연산자라고 함cout
콘솔 출력 객체<<
연산자 함수
위의 코드를 다시 구체적으로 설명하면 cout, cin은 std 네임스페이스에 속해 있고, 해당 객체를 통해 “Hello, World!”라는 문자열을 넘겨 화면에 출력하라는 의미라고 해석할 수 있다. 기존 C언어에서 printf() 함수를 이용한 방식보다 콘솔 입출력이 훨씬 간단하다. 서식 지정자를 지정해 줄 필요도 없고, 일일이 type에 맞출 필요도 없습니다. 그냥 cout, cin 객체에 값을 넘겨주면 끝!
2. cout
cout 예제코드(설명 생략)
#include <iostream>
using namespace std;
int main()
{
cout << 10 << endl;
cout << 10U << endl;
cout << 10.5F << endl;
cout << 10.5 << endl;
cout << 3 + 4 << endl;
return 0;
}
3. cin
cin 예제코드 (설명 생략)
#include <iostream>
#include <string>
using namespace std;
int main()
{
int nAge;
cout << "나이를 입력하세요." << endl;
cin >> nAge;
char szJob[32];
cout << "직업을 입력하세요." << endl;
cin >> szJob;
string strName;
cout << "이름을 입력하세요." << endl;
cin >> strName;
cout << "당신의 이름은 " << strName << "이고, " << "나이는 " << nAge << "살이며, "
<< "직업은 " << szJob << "입니다." << endl;
return 0;
}
4. auto 예약어
- C에서
auto
예약어는 지역 변수 선언에 사용 되었음 - C++11표준에서는 auto 예약어의 기능 변경
- 아래 코드에서 볼 수 있듯,
초기값 형식에 맞춰 type이 자동으로 결정
#include <iostream>
using namespace std;
int main()
{
int a(10); // 변수 a를 10으로 초기화
int b(a); // 변수 b를 a로 초기화
auto c(b); // auto 자료형을 이용하여 c를 b로 초기화
cout << a + b + c << endl;
return 0;
}
5. 메모리 동적 할당
- C에서는 malloc(), free()함수를 이용하여 메모리 동적 할당 및 해제
- C++에서는
new
,delete
연산자를 이용하여 메모리 동적 할당 - new, delete의 가장 큰 특징은 메모리 크기를 지정하지 않아도 됨
#include <iostream>
using namespace std;
int main()
{
// 메모리 동적 할당, 초기화
int *pData = new int;
int *pNewData = new int(10);
*pData = 5;
cout << *pData << endl;
cout << *pNewData << endl;
// 동적 할당 메모리 해제
delete(pData);
delete(pNewData);
return 0;
}
- new 연산자는 객체의 생성자(Constructor)를 호출
- delete 연산자는 객체의 소멸자(Destructor)를 호출
6. 참조자(Reference)
- C언어의 포인터와 비슷하게 동작
&
사용- 반드시 선언과 동시에 초기화 해야 됨
- 상수에는 참조자를 선언할 수 없음
type &참조자 이름 = 원본;
#include <iostream>
using namespace std;
int main()
{
int nData = 10;
int &ref = nData;
ref = 20;
cout << nData << endl;
int *pnData = &nData;
*pnData = 30;
cout << nData << endl;
return 0;
}
- 참조자로 선언된 ref를 통해 nData의 값을 변경할 수 있음
- 겉으로는 포인터처럼 보이지 않지만 동작은 포인터처럼 동작
7. r-value 참조
- &가 두 번 연속(&&)으로 나오는 참조자
- C++11 문법
#include <iostream>
using namespace std;
int TestFunc(int nParam)
{
int nResult = nParam * 2;
return nResult;
}
int main()
{
int nInput = 0;
cout << "Input Number: ";
cin >> nInput;
// nInput + 5의 결과로 만들어진 임시 객체에 대한 참조
int &&rdata = nInput + 5;
cout << rdata << endl;
// TestFunc의 리턴값을 갖는 임시 객체에 대한 참조
int &&result = TestFunc(10);
result += 10;
cout << result << endl;
return 0;
}
임시 객체, 임시 결과 값는 연산에 활용된 직후 소멸하는 r-value를 의미한다. r-value 참조자
란 곧 사라질 임시 객체의 값을 참조할 수 있도록 하는 참조자를 의미한다. 일단은 임시 결과를 참조할 수 있도록 하는 하나의 문법임을 기억하자.
8. 범위 기반 for문 (Range based for)
- C++11에 새로 생긴 문법
- for문의 횟수를 직접 지정해주지 않아도 됨
- 예를 들어 배열의 경우 배열 요소의 개수에 맞춰 자동으로 반복 횟수가 지정 됨
#include <iostream>
using namespace std;
int main()
{
int aList[5] = {10, 20 , 30, 40, 50};
// 전형적인 C 스타일 for문
for(int i = 0; i < 5; i++)
{
cout << aList[i] << endl;
}
// Range-Based for
// C++11 기반 for문
for(auto item : aList)
{
cout << item << endl;
}
// 만약 배열 요소의 값을 변경하고 싶다면 &(참조자)를 활용하여 배열의 각 요소를 참조하여 값을 변경
for(auto &item : aList)
{
cout << item << endl;
}
return 0;
}
본 포스팅 내용은
이것이 C++이다
를 학습한 내용을 바탕으로 요약한 글입니다. 코드에 문제가 있을 수 있으며 다소 부정확한 내용이 있을 수 있으니 참고하시기 바랍니다. 잘못된 내용이 있다면 덧글로 남겨주시면 내용을 반영하여 수정하도록 하겠습니다. 감사합니다.
[Reference]
[1] 이것이 C++이다, p.25-53