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.
'VisualStudio.C++.C# > C . C++' 카테고리의 다른 글
C,C++. enum (0) | 2019.05.16 |
---|---|
C,C++. enum with get string. (0) | 2019.05.12 |
C++ 클래스 static 변수 초기화. (0) | 2017.03.13 |
C++ std::chrono, time_point, duration, system_clock, steady_clock 고정밀 시각, 시간. (0) | 2016.02.20 |
C/C++ 실수형 float, double 표준 IEEE754. 실수자료형 사용시 주의사항. (0) | 2016.02.18 |
댓글