■ 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() { ... }
};
'Coding > C & C++' 카테고리의 다른 글
C++ 연산자 오버로딩 2(대입, 배열의 인덱스, new/delete 연산자) (0) | 2020.03.01 |
---|---|
C++ 연산자 오버로딩 1(기본 연산자, 단항 연산자, << 연산자) (0) | 2020.02.26 |
C++ 상속 정리 (0) | 2020.02.24 |
C++ 생성자, 소멸 (0) | 2020.02.21 |
C/C++ 파일 분할과 헤더 파일의 디자인 (0) | 2020.02.18 |