카테고리 없음

가상 함수, 추상 클래스

zuyo 2019. 5. 9. 01:55
반응형

C++ 컴파일러는 포인터의 자료형을 기준으로 판단한다.
Parent 클래스의 자식 클래스인 Child 객체를 생성했으나, 여전히 Parent 객체로 인식한다.

void main() {
	Parent* parent = new Child();
	
        parent->ChildFunc(); // 에러
	Child* child = parent; // 에러
}

* Java에서는 이런 상황에서 자식 클래스(Child)의 함수가 우선적으로 호출된다.


가상 함수 (Virtual Function)

 

가상함수는 포인터 변수가 실제로 가리키는 객체를 참조하여 호출 대상을 결정한다.

class Child : public Parent {
public:
        virtual void ChildFunc() {...}
}

void main() {
	Parent* parent = new Child();

        parent->ChildFunc(); // 성공
}

추상 클래스 (Abstract Class)

- 객체 생성이 불가능한 클래스 (인터페이스와 유사)
- 하나 이상의 멤버 함수가 순수가상함수인 클래스

추상 클래스를 만드는 방법은 하나 이상의 멤버 함수를 순수가상함수로 선언하는 것이다. 이렇게 하면 객체 생성을 문법적으로 막을 수 있다. 

순수 가상함수는 함수의 몸체가 없으며, 가상함수에 0을 대입함으로써 선언한다. 이는 컴파일러에게 몸체를 정의하지 않음이라고 알리는 표시이다.

virtual int GetPay() const = 0;
반응형