득이공간

[C++ 문법 정리] 2. C++ 기본 본문

PS/C++

[C++ 문법 정리] 2. C++ 기본

쟁득 2024. 2. 3. 22:52
해당 게시물은 쥬신게임아카데미의 '2개월차 C++' 강의를 수강하며
학습한 내용을 개인적으로 정리한 글입니다.

📌 목차 - 2. C++ 기본

1. 클래스
2. 생성자, 소멸자, 전방선언
3. 복사생성자
4. const, static, this, extern, friend

5. 상속, 다형성
6. 캐스팅, 가상함수테이블, 바인딩
7. 순수가상함수, 연산자오버로딩
8. 인라인함수, 임시객체, 함수객체
9. 템플릿

10. STL개요
11. vector
12. list
13. map
14. 알고리즘함수


📌 1. 클래스

변수와 함수를 하나로 묶어 놓은 하나의 틀
instance: 메모리에 등록된 클래스, 하나의 객체
멤버접근지정자: private, public, protected
속성: 은닉화, 캡슐화, 상속성, 다형성


📌 2. 생성자, 소멸자, 전방선언

생성자: 객체 생성 시 자동으로 호출
소멸자: 객체 소멸 시 자동으로 호출
전방선언: 외부파일 어딘가에 해당 클래스가 존재한다고 알려준다.


📌 3. 복사생성자

생성자의 인자로 객체를 전달받는 것.
디폴트 복사 생성자는 얕은 복사, 단순 대입으로 인해 복사 받은 객체가 동적할당된 주소들을 공유하게 된다.
동적할당한 멤버가 있을 경우 복사 받는 객체 또한 깊은복사로 동적할당을 진행한다.


📌 4. const, static, this, extern, friend

const 멤버 변수: 이니셜라이저를 통해 초기화 한다. 값을 변경할 수 없다.
const 멤버 함수: 함수 내부에서 멤버 변수들의 값을 변경할 수 없다.
const 객체: const 멤버 함수의 호출만 가능하다.
static 멤버 변수: 전역에서 초기화 한다.
static 멤버 함수: 프로그램 실행시 메모리에 등록이 되므로 상시 호출이 가능하다.
this 포인터: 자기 자신의 주소를 저장하고 있는 포인터
extern: 외부 파일 어딘가에 전역 변수 / 함수가 존재한다고 알려주는 역할
friend: private 멤버의 접근 권한을 타 클래스 or 타 클래스의 멤버함수에게 허용한다. (은닉화 위반 / 짝사랑)


📌 5. 상속, 다형성

상속: 부모가 가진 것을 자식에게 복사해서 물려준다.
public 상속: 그대로 (private 접근불가)
protected 상속: 모두 protected로 (private 접근불가)
private 상속: 모두 private으로 (private 접근불가)
상속의 관계: is-a관계
다중상속: ,를 이용하여 여러개 상속받는다.
다양한 클래스를 상속받을 때 중복되는 이름의 함수가 생길 수 있다.
객체포인터: 객체의 주소를 저장하는 포인터
오버라이딩: 부모클래스가 가지고 있는 멤버함수를 자식 클래스에 그대로 재정의
virtual: 반환 타입 앞에 virtual 키워드를 명시하면 가상 함수가 된다.
다형성: 객체포인터 + 오버라이딩 + virtual
가상소멸자: 소멸자 앞에 virtual 키워드를 붙여준다.


📌 6. 캐스팅, 가상함수테이블, 바인딩

캐스팅: 형변환
c: (자료형)데이터 //강제 형변환, 타입 상관x
c++: cast<자료형>(데이터)
static_cast: 컴파일 시점
dynamic_cast: 실패시 nullptr반환, 상속 관계에서 virtual 하나라도 존재해야함.
const_cast: const 제거
reinterpret_cast: 모든 포인터간의 형 변환 허용
가상함수테이블: 가상함수의 주소를 저장하는 포인터배열
가상함수포인터: 해당 클래스의 가상 함수 테이블을 가리킨다.
바인딩: 프로그램 구성 요소의 성격을 결정하는 것.
정적 바인딩: 컴파일 시점 (일반 멤버 함수)
동적 바인딩: 런타임 시점 (가상 함수)


📌 7. 순수가상함수, 연산자오버로딩

순수가상함수: 정의부가 없는 가상 함수, =0.
추상클래스: 순수 가상 함수를 단 하나라도 가지는 클래스.
연산자오버로딩: 동일한 이름의 연산자를 매개변수 정보를 다르게하여 재정의한다.
전위,후위증감연산자오버로딩: (매개변수자리에 자료형 쓰면 후위)


📌 8. 인라인함수, 임시객체, 함수객체

인라인함수: 매크로함수의 장점을 취하고, 단점을 보완한 함수
임시객체: 이름 없이 메모리에 잠시 등록되는 객체
함수객체: 객체를 함수처럼 사용한다.


📌 9. 템플릿

함수템플릿: 사용자가 만든 함수의 템플릿
템플릿함수: 컴파일러가 함수 템플릿을 토대로 만든 함수
클래스템플릿: 사용자가 만든 클래스의 템플릿
템플릿클래스: 컴파일러가 클래스 템플릿을 토대로 만든 클래스
템플릿static: 같은 타입을 사용하는 객체끼리만 static 변수를 공유한다.
템플릿상속: 부모가 템플릿이면 자식도 템플릿, 자식이 템플릿이면 부모는 상관없음


📌 10. STL개론

시간복잡도: 상수시간, 로그시간, 선형시간, 지수시간
STL: Standard Template Library, 표준에 등록된 템플릿 집합.
컨테이너: 데이터를 저장하는 객체. 자료구조를 구현한 객체.
원소배치방법 - 선형적구조, 비선형적구조
데이터저장방법 - 배열기반, 노드기반
알고리즘: 컨테이너 내에서 정렬, 삭제, 탐색 등을 해결하는 일반화된 방법을 제공하는 함수 템플릿.
반복자: 포인터와 사용방법이 같은 객체.
vector: 동적배열 기반 / 탐색 용이 / 삽입삭제 불리
list: 노드 기반 / 탐색 불리 / 삽입삭제 용이
map: key와 value 노드 기반 / key이용한 임의접근(key중복x) / 삽입삭제 불리(key정렬때문)


📌 11. vector

vector메모리 예약: 생성자, reserve
vector메모리 재할당: 기존 메모리 개수 + (기존 메모리 개수 >> 1)
push_back, pop_back
size, capacity
resize, reserve, clear, empty
swap
front, back
begin, end
insert, erase


📌 12. list

push_front, push_back, pop_front, pop_back
size
clear, empty
swap
front, back
begin, end
insert, erase


📌 13. map

[0] = 0
insert(pair<int, int>(1. 100))
insert(make_pair(2, 200))
insert(map<int, int>::value_type(3, 300))
insert({4, 400})
emplace(5, 500)
insert와 []의 차이점.
insert: key값이 없을 경우 원소를 삽입한다. / key값이 있을 경우 무시한다.
[]: key값이 없을 경우 원소를 삽입한다. / key값이 있을 경우 value를 수정한다.
find: 탐색 성공시 해당 위치 반복자, 탐색 실패시 end반복자


📌 14. 알고리즘함수

sort(시작, 끝, 조건자)
count_if(시작, 끝, 조건자)
for_each(시작, 끝, 조건자)
find_if(시작, 끝, 조건자)