홍승아블로그

C/C++

C

전역변수

  1. 특징
  • 함수외부에서 선언
  • 메모리의 어느 특정공간(heap)에 자리를 차지하고 모든 함수 access 가능
  • 프로그램 시작 시 생성 및 할당, 프로그램 종료가 되면 그 메모리 공간을 반환
  1. 장점
  • 사용하기 편리하다, 모든 함수에서 access 가능, call-by-reference로 값을 반환
  1. 단점
  • 모든 함수에서 그 값을 변경할 수 있기 때문에 이더서든지 변한다. 메모리 공간을 반환하지 않음

지역변수

  1. 특징
  • 함수 혹은 {…} 범위 내부에서 선언
  • 함수가 호출되면 메모리의 생성, 할당이 되며 함수가 끝나면 메모리 반환
  • 범위 안에서 접근, 접근하려면 call-by-reference 포인터가 필요
  1. 장점
  • 메모리의 낭비가 일어나지 않는다.
  1. 단점
  • 다른 함수에서 특정 함수의 변수로 접근할 때 까다롭다.

정적변수(static valuable)

  1. 특징
  • 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;

추상클래스

  1. 객체 생성이 불가능한 클래스
  2. 하나 이상의 순수 가상 함수 포함

가상소멸자

  • 객체의 소멸과정에서는 delete 연산자에 사용된 포인터 변수의 자료형에 상관없이 모든 소멸자가 호출되어야 할 경우에 virtual 선언해서 가상소멸자를 구현해줘야한다. 하나 이상의 가상함수가 있을 경우 무조건 가상소멸자를 호출해줘야한다.
vitual ~First();
이전글
web tools
다음글
Windows API