Language/C++

[C++] CH2 C++ 프로그래밍의 기초

nowkoes 2023. 1. 27. 23:20

C++ 프로그램의 기본 요소와 화면 출력

// 예제 2-1
#include <iostream> // 기본 입출력에 대한 클래스와 객체를 선언

int main() {
    std::cout << "Hello World\n"; // 출력문
    std::cout << "첫 번째 맛보기입니다.";

    return 0; // 프로그램 종료
}

cout << 문자열과 다양한 데이터를 화면에 출력하는 문법.

\n : 개행 문자. std::endl; 로 대체 가능 (두 개의 차이는 버퍼를 비우냐 안 비우느냐 차이)
:: : 범위 지정 연산자

주석문(Comment): 프로그램의 실행에 영향을 미치지 않으며 개발자가 프로그램에 대한 설명이나 자유롭게 붙인 특이 사항의 메모

  • 여러 줄의 주석을 만들 땐 /* ~ 내용 ~ */
  • 한 줄의 주석을 만들 땐 //

Main() 함수: C++ 프로그램의 시작점. C++ 프로그램은 반드시 하나의 main() 함수가 존재해야 하며, main() 함수가 종료되면 프로그램이 종료된다.

  • 리턴 타입은 int다 (void를 한다고 해서 컴파일러에서 에러 처리하진 않지만, int로 하는 것이 좋다)
  • main() 함수는 정수를 리턴하는 return 문이 있어야 한다.
    • main() 함수가 반환한 정수 값은 부모 프로그램인 운영체제에 전된다.

전처리기(Preprocessor) : C++ 소스 파일을 컴파일하기 전에 헤더 파일을 읽어 C++ 소스 파일 안에 삽입할 것을 지시하는 것.

  • C++ 컴파일러는 처음에 전처리기를 호출하여 #include로 된 라인을 모두 처리한 후, C++ 소스 파일 컴파일.
// 예제 2-2
#include <iostream>

double area(int r); // 면적을 구하는 함수의 원형 선언

double area(int r) // 면적을 구하는 함수
{
    return 3.14 * r * r;
}

int main()
{
    int n = 3;
    char c = '#';

    std::cout << c << 5.5 << '-' << n << "hello" << true << std::endl; 
    // 출력을 << 연산자를 이용해 여러 번 할 수 있음
    std::cout << "n + 5 = " << n + 5 << '\n';
    std::cout << "면적은 " << area(n);

    return 0;
}

다음과 같이 여러 개의 << 연산자로 한 문장에 여러 데이터를 출력할 수 있음.

 

요약

주석문
1. 정의: 프로그램의 실행에 영향을 미치지 않으며 개발자가 프로그램에 대한 설명이나 자유롭게 붙인 특이 사항의 메모
2. 사용법
 a. /*  ~~~ */
 b. ~~~ //

Main()
1. 정의: C++ 프로그램의 시작점
2. 특징
 a. 리턴 타입: int
 b. Main()도 함수기 때문에 반환을 해야함

cout과 << 연산자를 이용해 화면에 출력할 수 있음

namespace와 std::

namespace: 프로그램에서 이름(indentifier)이 충돌하는 것을 막기 위해, 고유한 이름 공간을 생성할 수 있도록 만든 키워드

  • namespace를 생성하는 방법은 다음과 같이 키워드 뒤에 이름 을 짓고 '{ }'로 묶는다.
  • 이름 공간을 이용하기 위해 서는 다음과 같이 사용한다.
이름공간(namespace) :: 이름(identifier)
namespace <name> { ... }

 

  • std:: : C++ 표준 라이브러리가 들어 있는 표준 이름 공간으로서, 응용 프로그램이 std에서 선언된 이름을 사용할 때 std::를 접두어로 붙여야 한다.
    • std는 상당히 많이 사용하기 때문에, std 이름 공간에 선언된 수많은 이름에 대해 사용할 때마다 std:: 접두어를 붙이는 것은 상당히 번거롭다.
    • 이를 해결 하기 위해 using 지시어를 이용해 이름 공간 접두어를 생략할 수 있다.

 

요약

namespace
1. 정의: 이름이 충돌하는 것을 막기 위한 키워드
2. 사용법
 - namespace <name> { 내용 }으로 선언하고 name::으로 접근
3. std:: : C++ 표준 라이브러리가 들어 있는 표준 이름 공간

키 입력 받기

// 예제 2-3
#include <iostream>
using namespace std;

int main()
{
    cout << "너비를 입력하세요: ";

    int width;
    cin >> width; // 콘솔 창에서 입력한 정수를 width에 저장

    cout << "높이를 입력하세요: ";

    int height;
    cin >> height; // 콘솔 창에서 입력한 정수를 height에 저장

    int area = width * height;
    cout << "면적 = " << area << '\n'; // 면적 출력 
}

 

cin >> : 사용자로부터 키를 입력 받는 표준 입력 스트림

>> 연산자: 스트림 추출 연산자로서, 왼쪽 피연산자인 스트림 객체로부터 데이터를 읽어 오른쪽 피연산자에 지정된 변수를 삽입

  • 입력한 키들은 일차적으로 cin 스트림 버퍼에 저장
  • Enter키가 입력되는 순간 >> 연산자가 입력 버퍼에서 키 값을 끌어내 변수에 저장
  • 여러 개의 >> 연산자를 이용해 여러 값을 한 번에 입력받을 수 있음

 

요약

cin과 >> 연산자를 이용해 키를 입력받을 수 있음

키보드로 문자열 입력

C-string : null 문자로 끝나는 char 배열로서, C언어에서 사용하는 문자열 방식.

  • 이때 마지막에 null 문자를 더해야하므로 배열의 크기는 문자수보다 최소한 1은 커야 한다.
  • 배열의 크기에 의해 문자열 크기가 고정됨.
  • cstring 혹은 string.h을 include 해야 한다.
// 예제 2-4
#include <iostream>
using namespace std;

int main()
{
    cout << "이름을 입력하세요: ";

    char name[11];
    cin >> name;

    cout << "이름은 " << name << "입니다. \n";

    return 0;
}
// 예제 2-5
#include <iostream>
#include <cstring> // strcmp() 함수를 사용하기 위한 헤더 파일
using namespace std;

int main()
{
    char password[11];
    cout << "암호를 입력하세요: \n";

    while (true)
    {
        cout << "암호: ";
        cin >> password;

        if (strcmp(password,"C++") == 0) // 문자열 비교 함수
        {
            cout << "로그인 되었습니다. \n";
            break;
        }

        else
        {
            cout << "암호가 틀렸습니다. \n";
        }
    }

    return 0;
}

 

strcmp(string1, string2) : 문자열 string1과 string2를 비교하여 참이면 0을 반환하는 함수
cin.getline(string, size, delimitchar) : 키보드로부터 읽은 값을 string이라는 배열에 size 크기로 저장한다. 이때 문자열 입력 끝을 지정하는 구분 문자는 delimitchar다.
getline(istream, string, dlim) : string 타입의 C++ 문자열을 입력 받기 위해 제공되는 함수로서, string을 구분자 dlim으로 저장한다.

 

string class : 문자열 연산을 위한 멤버 함수와 연산자를 제공하는 C++ 표준 라이브러리에서 제공하는 클래스.

 

요약

C-string
1. 정의: null 문자로 끝나는, c언어에서 사용하는 문자열 방식
2. 문법
 - strcmp()

String class
1. 정의: C++에서 제공하는 문자열 클래스
2. 문법
 - cin.getline(), getline()

전처리기

C/C++ 컴파일러는 컴파일 전에 우선 전처리기(preprocessor)를 실행시켜 #include 문을 모두 처리한다. 이때 전처리기는 #include 문에 지정된 헤더파일의 텍스트를 #include 문이 있던 그 자리에 삽입한다.

  • #include < > : 컴파일러가 설치된 폴더에서 헤더 파일을 찾음
  • #include " " : 개발자의 프로젝트 폴더나 개발자가 컴파일 옵션으로 지정한 include 폴더에서 헤더 파일을 찾음
    • 이때 헤더파일에는 함수의 원형만 존재하며, 실제 코드는 lib 폴더에 저장되어 있다.

 

요약

전처리기
1. 정의: C++ 소스 파일을 컴파일하기 전에 헤더 파일을 읽어 C++ 소스 파일 안에 삽입할 것을 지시하는 것
2. 종류
 a. #include < >: 컴파일러가 설치된 폴더에서 헤더 파일을 찾음
 b. #include " ": 개발자의 프로젝트 폴더나 개발자가 컴파일 옵션으로 지정한 include 폴더에서 헤더 파일을 찾음

문제풀이: GitHub

반응형