본문 바로가기

프로그래밍/C++

C++ 기초 2

컴파일 과정

전처리기 -> 컴파일러 -> 어셈블러 -> 링커

 

값에 의한 전달 (Call by Value)

 : 함수를 호출하면서 파라미터를 넘길 때 값이 복제되어 전달된다.

 

참조에 의한 객체 전달 (Call by Reference)

 : 파라미터로 넘겨지는 객체가 복제되는 오버헤드를 피하기 위해 사용한다. 주소값만 복제되고 내용은 복제되지 않기 때문에 값에 의한 전달보다 효율적이다.

 

얕은 복사 (Shallow Copy)

 : 비트 단위 복제, 포인터가 가리키는 데이터는 빼놓고 피상적으로 그 변수값, 즉 주소값만 복제하는 것이다.

 

깊은 복사 (Deep Copy)

 : 포인터 변수값만 피상적으로 복제하지 않고 그 변수의 맥락에 맞게 연관된 데이터까지 재귀적으로 온전하게 복제하는 것이다.

 

클래스가 동적 할당 메모리를 가진다면 소멸자, 복제 생성자, 대입 연산자를 꼭 구현해야 한다.

 

static 데이터 멤버

 : 전역 변수와 유사하나 특정 클래스에 종속된다.

 

클래스 밖에서 static 데이터 멤버에 접근하려면 스코프 연산자(::)를 붙여주어야 한다.

 

const 데이터 멤버

 : 생성 시점에 초기값을 부여한 다음 더는 값을 변경할 수 없게 된다. 

 

static const 멤버를 이용해서 객체 간에 상수값을 공유하도록 할 수 있다.

 

mutable

 : 이 속성을 접근 카운터 멤버 변수에 적용하면 컴파일러는 해당 변수의 변경이 메서드의 const에 영향을 미치지 않는 것으로 간주한다.

 

inline

 : 호출 지점바로 메서드나 함수의 바디를 옮겨놓아 호출 오버헤드를 줄이는 기능을 한다.

 

소멸자가 virtual이 아닌 경우 객체가 소멸하더라도 해제되지 않은 메모리 영역이 남겨질 수 있다.

 

런타임 타입 정보(RTTI)

 : 객체의 런타임 정보를 얻을 수 있는 기능이다.

 

dynamic_cast 

 : RTTI를 이용하여 객체 계층 간에 타입 변환을 안전하게 할 수 있도록 해준다.

 

typeid

 : 런타임에 객체의 타입이 무엇인지 알 수 있게 해준다.

 

'프로그래밍 > C++' 카테고리의 다른 글

Reference (참조자)  (0) 2019.06.01
while과 do while, #define과 inline  (0) 2019.05.31
C++ 기초  (0) 2019.03.28
코드의 재사용성  (0) 2019.03.19
STL컨테이너에 저장되어야할 항목과 반복자  (0) 2019.03.18