«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

ITGenerations

[c++] summary of 가상함수와 추상클래스 본문

프로그래밍/c++ 명품프로그래밍

[c++] summary of 가상함수와 추상클래스

ITGenerations 2018. 1. 3. 08:08

상속 관계에서의 함수 중복

  파생 클래스에 기본 클래스와 동일한 형식의 함수가 중복 작성된 경우, 기본 클래스에 대한 포인터로는

기본 클래스에 선언된 함수를 호출하고, 파생 클래스에 대한 포인터로는 파생 클래스에 선언된 함수를 

호출한다.


가상 함수와 오버라이딩

  가상 함수란 virtual 키워드로 선언된 멤버 함수로서, 컴파일러에게 자신에 대한 호출을 실행 시간 까지

미루도록 지시한다.

  파생 클래스에서 기본 클래스에 선언된 가상 함수와 완전히 동일한 타입의 함수를 재정의하는 것을

함수 오버라이딩 혹은 함수 재정의라고 부른다.

  파생 클래스에서 가상 함수를 오버라이딩하고 기본클래스의 포인터로 파생 클래스의 객체를 가리킬 때,

가상 함수를 호출하면 무조건 파생 클래스에서 오버라이딩한 가상 함수가 호출된다. 이것을 동적 바인딩

이라고 한다.

  가상 함수의 이름, 매개 변수 개수와 타입, 리턴 타입까지 일치할 때 오버라이딩이 성공한다.

  가상 함수의 virtual 선언은 상속되므로 오버라이딩 시 virtual을 생략할 수 있다.

  파생 클래스에서 범위 지정 연산자(::)를 사용하면 기본 클래스의 가상 함수를 강제로 호출할 수 있다.

컴파일러에 의해 정적 바인딩 된다.

  가상 소멸자는 virtual로 선언된 소멸자로서 사용을 권장한다. 기본 클래스에 대한 포인터를 이용하여 파생

클래스의 객체를 소멸시켜도, 소멸자가 virtual로 선언되어 있으면, 파생 클래스의 소멸자가 실행되고 뒤이어

기본 클래스의 소멸자가 실행되는 정상적인 과정이 진행된다.


추상클래스

  함수의 코드가 없고 선언만     있는 순수 가상 함수라고 부른다.

  최소한 하나의 순수 가상 함수를 가진 클래스를 추상 클래스라고 부른다.

class  Shape {    // Shape은 추상 클래스

public:

virtual void draw()=0;    //순수 가상 함수

};


  추상 클래스는 온전한 클래스가 아니므로 인스턴스를 생성할 수 없다.

  추상 클래스에 대한 포인터는 선언할 수 있다.

  추상 클래스에 상속을 위한 기본 클래스로서 파생 클래스에서 구현할 함수의 원형을 알려주는 인터페이스의 역할을 한다.

  추상 클래스 구현이란 파생 클래스에서 추상 클래스를 상속받아 순수 가상 함수를 모두 구현하는 것이다.

  추상 클래스를 상속 받은 파생 클래스가 순수 가상 함수를 모두 구현하지 않는 경우 역시 추상 클래스가 된다.

  추상 클래스로 기본 방향을 잡아놓고 파생 클래스에서 그 목적에 따라 서로 다르게 구현할 수 있으므로 프로그램 설계와 구현을 분리할 수 있다.