정적 바인딩 : 컴파일 타임에 자료형 / 타입에 따라 어떤 함수를 호출할 지 결정하는 바인딩 방식
CObj* player = new CPlayer => CObj의 함수를 호출한다
정적 바인딩에서는 앞쪽에 선언된 Type에 따른다
동적 바인딩 : 런 타임에 가지고 있는 가상 함수 테이블에 따라 어떤 함수를 호출할 지 결정하는 바인딩 방식
CObj* player = new CPlayer; => 동적 바인딩 방식의 경우 뒤에 CPlayer의 함수를 호출 한다
동적 바인딩에서는 뒤쪽에 선언된 Type에 따른다
함수 매크로 - 전처리기 문법
장점 : 1. 단순 치환 기능으로 속도가 매우 빠름
2. 자료형에 구애받지 않음
단점 : 1. 컴파일 타임의 문법으로 런타임의 에러 파악 불가
2. 단순 치환이므로 연산자 우선 순위 지정이 중요함
3. 긴 함수는 가독성이 떨어짐
ex)
inline void Func() { cout << "hello world!" << endl }
함수 매크로(define)의 장단점을 보완하기 위한 문법
inline함수는 함수 매크로가 컴파일 타임에 동작하는 단점을 해결하는 문법
but... 자료형에 의존적이며 선언 여부에 관계 없이 컴파일러 스스로 inline 여부 적용
유의 사항 - 자동적으로 일반 함수로 변환되는 경우
연산자 오버로딩 : 함수의 오버로딩 문법을 연산자에 적용시킨 문법 좌측의 객체를 기준으로 수행, C++클래스에서 가능한 문법
일반적으로 클래스끼리의 합, 차 연산은 각 클래스 내부의 멤버 수를 알 수 없기에 진행 불가 => 연산자 오버로딩을 통해서 가능하게 할 수 있다
ex)
class COperator
{
private:
int m_First;
int m_Second;
public:
COperator() {}
COperator(int _First, int _Second) : m_First(_First), m_Second(_Second) {}
~COperator() {}
public:
COperator operator + (COperator& rObj)
{
COperator Result((m_First + rObj.m_First), (m_Second + rObj.m_Second));
return Result;
}
COperator operator - (COperator& rObj)
{
COperator Result((m_First - rObj.m_First), (m_Second - rObj.m_Second));
return Result;
}
COperator& operator = (COperator& rObj)
{
// 자기 자신을 가공해야 하므로 &를 통해 실제 값에 접근
m_First = rObj.m_First;
m_Second = rObj.m_Second;
return *this;
}
COperator& operator ++ ()
{
// 전위 연산의 경우
m_First += 1;
m_Second += 1;
return *this;
}
COperator& operator ++ (int)
{
// 후위 연산의 경우 -> 매개변수에 연산할 자료형을 명시
COperator Obj(*this); // 자기 자신을 먼저 불러온 후 연산을 진행하기 위함
m_First -= 1;
m_Second -= 1;
return Obj;
}
};
operator : 다른 객체를 매개변수로 받아 함수 내에서 연산
default 대입 연산자 : 클래스 생성 시 자동 생성도는 4요소 중 하나
대입 연산자를 따로 선언하더라도 객체를 초기화 하는 순간에는 default 대입 연산자 작동
얕은 대입 / 깊은 대입 존재하지만, 깊은 대입은 잘 사용되지 않음