ABOUT ME

Today
Yesterday
Total
  • c++ 프로그래밍 정리
    방송대/3-2학기 2021. 11. 29. 16:54

    01. c++ 언어의 소개

     

    01-2. C++ 프로그램의 작성 및 빌드

    (1) C++ 프로그램의 소스파일

    - C++ 소스 프로그램 파일: .cpp, .cxx, .C 등을 사용함

    - C++ 헤더파일

      - 클래스, 함수 원형, 매크로, 전역변수, 상수 등 여러 소스파일에 공통으로 선언되는 내용을 담고 있는 파일

      - 단독으로 컴파일되지 않고, #include (선행처리기 지시어) 에 의해 소스 프로그램 파일에 삽입돼 함께 컴파일됨

      - 확장자 일반적으로 .h

     

    컴파일 > 링크 (with 라이브러리) > 빌드 

     

    01-3. C++ 프로그래밍 첫걸음

     

    (1) C++ 소스 프로그램

    // 표준 출력 스트림으로 문장을 출력함
    std::cout << "어쩌구 저쩌구"

     

    (3) 선행처리

    - C++ 프로그램 컴파일 전에 소스 프로그램을 가공해 컴파일러가 실제로 번역할 소스 프로그램을 만드는 것

    - 대표적 선행처리

      - 헤더파일 삽입: #include

      - 매크로 선언 및 해제: #define, #undef

      - 조건부 컴파일: #if, #ifdef, #ifndef

     

    (4) 문장

    - 블록: 한 개 이상의 문장을 중괄호 ( '{' 와 '}' ) 안에 나열해 묶어놓은 것

      - 여러 개 문장을 묶어 1개의 문장처럼 취급하거나 함수 몸체를 구성하기 위해 사용

     

    (6) 입출력 스트림

    - std::cout 객체

      - 표준출력 스트림 객체, 데이터를 문자열로 변환해 출력함

      - 출력 연산자 (삽입 연산자) <<

    - std::cin 객체

      - 표준입력 스트림 객체, 문자열을 입력변수의 자료형의 값으로 변환해 입력함

      - 입력 연산자 (추출 연산자) >>

     

    (7) 명칭공간

    - 특정한 이름들이 인식되는 프로그램의 부분

      - 전역 명칭공간: 특정 명칭공간에 속하지 않는 기본 명칭공간

      - std 명칭공간: 표준 C++ 라이브러리의 명칭들이 정의되어 있는 명칭공간

     

    - using 을 이용한 명칭공간의 사용

    using namespace std;
    
    using std::cout;
    using std::endl;

     

    02. c++ 언어의 기초(1)

     

    02-1. 키워드와 식별자

     

    - 키워드: C++ 언어에서 미리 용도를 정해놓은 단어

    - 식별자: 여러 대상을 구분하기 위해 만든 이름: 변수나 함수, 클래스 등의 이름

     

    02-2. 기본 자료형 및 상수와 변수

    (1) C++ 의 자료형

    - 기본 자료형 

       - 정수 자료형 char, int, short, long, bool ... 

       - 실수 자료형 float, double, long double

    - 복합 자료형

    배열, 구조체struct, 클래스class, 열거형enum, 공용체union

    포인터, 참조

     

    (2) C++ 의 기본 자료형

    - 정수 자료형integral types

    고정 소수점(fixed-point) 방식의 숫자 표현: 오버플로overflow 가 발생하지 않게 주의해야 함

    - 문자 표현 자료형: char                                  > signed 또는

    - 정수 표현 자료형: int, short, long, long long    > unsigned

    - 참/거짓 표현 자료형: true, false

     

    - 실수 자료형

    부동 소수점(floating-point) 방식의 숫자 표현

      - float: 4byte, 부호 1bit, 지수부 8bit, 가수부 23bit 로 구성

      - double: 8byte, 부호 1bit, 지수부 11bit, 가수부 52bit 로 구성

     

    (3) 리터럴

    - 정수형 리터럴의 표현: 숫자를 표현하는 문자, 부호만으로 표현됨

    - 문자 리터럴의 표현: 작은 따옴표('') 안에 문자를 표기하는 방법

    - 실수 리터럴의 표현: 소수점이 있거나 10의 거듭제곱을 표현하기 위한 지수 기호인 'e'가 있으면 실수형 리터럴

     

    (4) 변수

    - 프로그램이 실행되는 동안 기억하고 있어야 하는 값들을 저장하는 메모리 영역

     

    (5) const 와 constexpr

    - const 한정어: 변수의 값을 수정할 수 없게 하고, 초기화를 통해서만 값을 정할 수 있다

    const double PI {3.14159}; // 원주율 정의

    - constexpr 한정어: 그 값을 컴파일할 때 평가한다는 의미, 실행 중 값을 평가하는 것에 비해 효율적으로 동작

    std::cin >> a;
    const int b = 20;
    const int C1 = a;
    constexpr int C2 = a + 10; // 오류: 컴파일 시에 a 의 값을 알 수 없음
    constexpr int C3 = b + 100; // b + 100 을 컴파일 시에 계산할 수 있음
    constexpr int C4 = C1 * 2; // 오류: 컴파일 시에 C1 의 값을 알 수 없음

    - constexpr 함수: 모든 인수가 constexpr 인 경우 컴파일할 때 값을 구할 수 있게 함

    constexpr int fac(int n) {
    	return n > 1 ? n * f(n-1) : 1;
    }
    
    void f(int x) {
        constexpr int a = fac(4); // 컴파일할 때 계산
        int b = fac(x); // 실행 중 계산
    }

     

    (6) 변수의 유효기간

    - 변수가 언제 만들어져서 언제 없어지는가를 나타냄

    - 자동변수 - 생성 시점: 함수(함수 안의 블록)가 시작될 때   - 소멸 시점: 함수(함수 안의 블록)가 종료될 때

    - 정적변수 - 생성 시점: 프로그램이 시작할 때   - 종료 시점: 프로그램이 종료될 때

    int x;              // 전역변수 - 정적 유효기간
    int f() {           
        int y;          // 지역변수 - 자동 유효기간
        static int z;   // 정적 지역변수 - 정적 유효기간
    }

     

    02-3. 연산자

    (1) 산술 연산자

    - 2항 연산자, 단항 연산자

    (2) 대입 연산자

    (3) 관계 연산자 >, <, >=, <=, ==, !=

    (4) 논리 연산자: 논리합 ||, 논리곱 &&, 부정 !

    (5) 비트단위 연산자

    - 비트단위 논리연산자: 논리합 |, 논리곱 &, 배타적 논리합 ^, 부정 ~

    - 비트이동 연산자

       - 좌측이동 << 우측 피연산자에 지정된 비트 수 만큼 좌측 피연산자를 좌측으로 이동,

              - 우측 비는 비트에는 0 이 채워짐

    unsigned char x = 0b00011101;
    unsigned char y = x << 2;

        - 우측이동 >> 우측 피연산자에 지정된 비트 수 만큼 좌측 피연산자를 우측으로 이동

               - signed 형에 대해서는 부호를 유지할 수 있도록 부호와 같은 비트가 좌측의 비는 비트에 채워짐

    char x = 0b10010100; // -108
    char y = x >> 2;

    (6) 조건연산자: 유일한 3항 연산자 ( 조건 ? 값1 : 값2 )

     

    02-4. 자료형의 변환

    (1) 묵시적 형변환

    - 두 값 사이의 연산에서 우선순위가 낮은 자료형 값이 순위가 높은 자료형 값의 형으로 자동적으로 변환됨

    - 여러 개의 연산으로 구성된 수식에서 묵시적 형 변환은 연산자 단위로 이뤄짐

    - 오차나 오버플로 발생할 수 있으므로 주의해야 한다

     

    (2) 명시적 형변환

    - static_cast: 실행 중에 형 검사를 하지 않으며, 컴파일할 때 수식에 지정된 그대로 변환함

    static_cast <int> ( n / 10.0 )
    // 형변환 연산자 / 변환하고자 하는 목표 자료형 / 형변환 대상 수식

    - dynamic_cast: 기초 클래스, 파생 클래스 간 포인터/참조 형변환이 프로그램 실행 중에 일어나도록 지시함

    - const_cast: const 지정을 일시 해제함

     

    03 C++ 언어의 기초(2)

     

    03-1. 흐름제어 구문

     

    (1) 흐름제어 구문의 종류

    - 조건문: 지정된 조건에 따라 실행흐름을 제어하는 문장: if 문, switch 문

    - 반복문: 정해진 범위의 문장을 반복적으로 실행하게 하는 문장: for 문, while 문, do ... while 문

     

    (3) 조건문 switch

    switch (정수형 수식) {
        case1: 
        	문장1; // 정수형 수식 == 값1 일 때 실행할 문장 나열
            break; // switch 문 빠져나감
        case2:
        	문장2; // 정수형 수식 == 값2 일 때 실행할 문장 나열
            break; // switch 문 빠져나감
        ...........
        default:   // 정수형 수식의 값과 일치하는 case 값이 없을 때 
        	문장n; // 실행할 문장 나열
    }

     

    (4) 반복문 for loop

    - for 문 사용형식

    for ( 초기화_문장 ; 반복조건 ; 증감_문장 ) 
    	반복할_문장;

    - 범위 기반 for loop

    for ( 원소 선언: 데이터 집합 )
    	반복할_문장;
    int arr[5] = { 2, 3, 9, 4, 7 };
    int sum = 0;
    
    for ( int a: arr ) {
    	sum += a;
    }
    cout << "합계 = " << sum << endl;

     

    03-2. 구조체와 클래스

     

    (1) 구조체

    - 여러가지 자료형의 데이터 집합을 저장할 수 있는 새로운 자료형을 정의한 것

    struct StructName {
        Type1 item1;
        Type2 item2;
        ...
    }

    - 구조체 활용예제

    #include <iostream>
    #include <cmath>
    using namespace std;
    
    struct C2dType { // 2 차원 좌표 구조체
        double x, y;
    }
    
    struct CircleType { // 원 구조체
        C2dType center; // 중심좌표
        double radius;  // 반경
    }

     

    (2) 클래스

    - 표현 대상이 어떤 일을 할 수 있는가 (행위) 와 어떤 데이터를 저장하는가 (속성) 를 하나의 단위로 묶어 선언한 것

    /* 행위 */
    init: 원의 초기화
    area: 원의 면적을 계산
    chkOverlap: 다른 원과 중첩 여부 검사
    display: 원의 정보 디스플레이
    /* 속성 */
    center: 중심 좌표
    radius: 반경

     

    ................ 더 있음 ............ 다음에 ...............

    '방송대 > 3-2학기' 카테고리의 다른 글

    댓글