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