본문 바로가기
VisualStudio.C++.C#/C . C++

C++ 클래스. 함수 오버라이딩. 가상함수. 순수가상함수. 추상 클래스.인터페이스 클래스.

by 리치굿맨 2017. 6. 23.


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.



댓글0


   
현물 |선물 인버스 |선물 USDT     현물 | 선물 USDT |봇제작툴/카피트레이딩     현물 |선물 인버스 |선물 USDT     선물 인버스 |선물 USDT