반응형
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;
반응형