-
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 (정수형 수식) { case 값1: 문장1; // 정수형 수식 == 값1 일 때 실행할 문장 나열 break; // switch 문 빠져나감 case 값2: 문장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학기' 카테고리의 다른 글
c++ 프로그래밍 (2) (0) 2021.11.30 컴퓨터구조 04 처리장치 (0) 2021.11.19 컴퓨터구조 (0) 2021.11.10 자료구조 03 스택 04 큐 05 연결 리스트 (0) 2021.11.08 선형대수 과목 행렬부분 02~ (0) 2021.10.28