Coding/C & C++

C++ 가상 함수

heyoon2j 2020. 2. 25. 01:50

 C++ 가상함수 / 순수 가상함수와 추상 클래스

ㆍ 가상함수

- "C++ 컴파일러는 포인터를 이용한 연산의 가능성 여부를 판단할 때, 포인터의 자료형을 기준으로 판단"

- 가상 함수는 실제 가리키는 객체의 자료형을 기준으로 판단하게 해 준다.

- virtual 키워드 선언

- 가상 함수로 선언한 함수에 대해 오버라이딩하는 함수들도 가상 함수가 된다.

=> 하위 클래스에서는 virtual을 쓰지 않아도 적용된다.

 

ex>

class First

{

public:

     virtual void MyFunc( ) {    ...     }

 

};

 

class Second: public First

{

public:

     virtual void MyFunc() {    ...     }

};

 

 

순수 가상함수와 추상 클래스

- 클래스 중에서는 객체 생성을 목적으로 정의되지 않는 클래스도 존재한다.

- 하지만 문법적으로 이상하지 않기 때문에 프로그래머는 언제든지 객체를 생성할 수 있다. 이런 실수를 방지하기 위해 문법적으로 막기 위해 추상 클래스를 사용한다. 

- "순수 가상함수""함수의 몸체가 정의되지 않은 함수"를 의미한다.

- "하나 이상의 멤버함수를 순수 가상함수로 선언한 클래스"를 가리켜 '추상 클래스'라고 한다.

* 다형성을 위해서는 소멸자도 가상 소멸자를 사용해야 된다. 그렇지 않으면 메모리 누수가 발생할 수 있다.

 

ex>

class Employee

{

private:

     char name[100];

public:

     Employee(char* name) {    ...     }

     void ShowYourName() const {    ...     }

     virtual int GetPay() const = 0;

     virtual void ShowSalaryInfo() const = 0;

     virtual ~Employee() {     ...     }

};