C++ 클래스. 함수 오버라이딩. 가상함수. 순수가상함수. 추상 클래스.인터페이스 클래스.
base class 에서 상속된 derived class 에 동일이름의 함수(예 : myFunction )가 있는 경우, base 클래스측의 함수선언에 따라 다른 동작이 이뤄진다. 아래 테이블의 항번 1, 2, 3 에 base 클래스 측의 함수선언방식 3 종을 보이고 있다.
항번 | base class | derived class |
1 | class base { void myFunction(); }; |
class derived : base { void myFunction(); }; |
2 | class base { virtual void myFunction(); }; | |
3 | class base { virtual void myFunction() = 0 ; }; |
virtual , 오버라이딩.
상기 1 처럼 base 클래스의 함수 선언을 virtual 로 하지 않은 경우, derived 클래스 개체.myFunction(); 호출하면 base 클래스 의 함수가 실행된다.
상기 2처럼 base 클래스의 함수 선언을 virtual 로 한 경우, derived 클래스 개체.myFunction(); 호출하면 derived 클래스의 함수가 실행된다. 이를 함수 오버라이딩이라 한다. 즉 derived class 의 함수가 실행되게 하려면 base class 에서 함수선언시 virtual 을 부착해둬야 한다.
순수가상함수. (pure virtual function)
- derived class 측에서 함수 필수 구현 하도록 강제하도록 하는 조치.
상기 테이블의 3번 처럼 해당 함수 = 0; 으로 초기화 한 것을 순수가상함수라고 한다.
base class 에 순수가상함수가 선언된 경우 derived class 에서 myFunction() 을 정의하지 않은 경우 컴파일 단계에서 에러 생긴다.
즉, derived class 에서 함수 필수 정의 하도록 강제하는 선언.
추상 클래스. (abstract class) = 순수가상클래스 (pure virtual class)
상기 테이블의 3처럼 순수가상함수가 1개 이상 있는 클래스.
추상 클래스 예. class myClass { virtual myClass(); // 일반생성자. virtual ~myClass() ; //소멸자. int I, j, k ; virtual void myFunc1() = 0 ; // 순수가상함수. <- 이것 1개만 있어도 추상클래스로 불림. void myFunc2() ; void myFunc3(); }; |
인터페이스 클래스. (interface class)
소멸자와 순수가상함수로만 정의된 클래스.
인터페이스 클래스 예. class myClass { public: virtual ~myClass() ; //소멸자. virtual void myFunc1() = 0 ; // 순수가상함수. virtual void myFunc2() = 0 ; // 순수가상함수. }; |
인터페이스 클래스 상세보기 -> http://igotit.tistory.com/1331
///1325.