C
전역변수
- 특징
- 함수외부에서 선언
- 메모리의 어느 특정공간(heap)에 자리를 차지하고 모든 함수 access 가능
- 프로그램 시작 시 생성 및 할당, 프로그램 종료가 되면 그 메모리 공간을 반환
- 장점
- 사용하기 편리하다, 모든 함수에서 access 가능, call-by-reference로 값을 반환
- 단점
- 모든 함수에서 그 값을 변경할 수 있기 때문에 이더서든지 변한다. 메모리 공간을 반환하지 않음
지역변수
- 특징
- 함수 혹은 {…} 범위 내부에서 선언
- 함수가 호출되면 메모리의 생성, 할당이 되며 함수가 끝나면 메모리 반환
- 범위 안에서 접근, 접근하려면 call-by-reference 포인터가 필요
- 장점
- 단점
- 다른 함수에서 특정 함수의 변수로 접근할 때 까다롭다.
정적변수(static valuable)
- 특징
- static 키둬드를 사용하여 선언할 때 자동으로 0으로 초기화 됨
- static 변수는 heap 영역에 할당되므로 종료해도 그 값을 유지하게 된다.
C++
가상함수
- 포인터의 자료형을 기반으로 호출대상을 결정하지 않고, 포인터 변수가 실제로 가리키는 객체를 참조하여 호출의 대상을 결정하는 것
가상함수 하는 이유
- C++ 컴파일러는 포인터의 연산의 가능성 여부를 판단할 때, 포인터의 자료형을 기준으로 판단하지, 실제 가리키는 객체의 자료형을 기준으로 판단 하지 않으므로, 실제 가리키는 객체를 호출하기 위해서 가상함수가 필요함.
가상함수 예제
Third *tptr = new Third();
Second *sptr = tptr;
First * fptr = sptr;
tptr->FirstFunc() (o)
tptr->SecondFunc() (o)
tptr->ThirdFunc() (o)
sptr->FirstFunc() (o)
sptr->SecondFunc() (o)
sptr->ThirdFunc() (o)
fptr->FirstFunc() (o)
fptr->SecondFunc() (o)
fptr->ThirdFunc() (o)
순수가상함수
virtual int GetPay() const = 0;
추상클래스
- 객체 생성이 불가능한 클래스
- 하나 이상의 순수 가상 함수 포함
가상소멸자
- 객체의 소멸과정에서는 delete 연산자에 사용된 포인터 변수의 자료형에 상관없이 모든 소멸자가 호출되어야 할 경우에
virtual 선언해서 가상소멸자를 구현해줘야한다.
하나 이상의 가상함수가 있을 경우 무조건 가상소멸자를 호출해줘야한다.