티스토리 뷰
1. 오버라이딩의 개념
함수 오버라이딩(function overriding)
- 파생 클래스에서 기본 클래스의 가상 함수와 동일한 이름의 함수 선언한다.
- 기본 클래스의 가상 함수의 존재감 상실한다.
- 파생 클래스에서 오버라이딩한 함수가 호출되도록 동적 바인딩한다.
- 함수 재정의라고도 부른다.
- 다형성의 한 종류
2. 가상함수, 추상클래스의 예
가상 함수(virtual function)
- virtual 키워드로 선언된 멤버 함수
- virtual 키워드는 동적 바인딩 지시어이다.
- 컴파일러에게 함수에 대한 호출 바인딩을 실행 시간까지 미루도록 지시한다.
- 오버라이딩, 함수 중복을 할 떄 사용 된다.
순수 가상 함수
- 함수의 코드가 없고 선언만 있는 가상 멤버 함수
- 순수 가상함수가 있는 클래스를 추상클래스라고 부른다.
- 추상클래스를 상속받으면 반드시 순수 가상 함수를 구현해야만한다.
*순수 가상 함수 사용 형식
class Shape {//순수 가상 함수를 포함하고 있는 클래스를 추상클래스라고 부른다.
public:
//가상 함수 선언
virtual void draw() = 0; //순수 가상함수 ㅣ 구현 코드없고 선언만 하는 함수
};
3. 동적바인딩 개념정리
- 기본 클래스에 대한 포인터로 가상 함수를 호출하는 경우(업캐스팅)
- 동적바인딩은 업캐스팅된 포인터로 오버라이딩된 파생클래스의 함수를 실행하도록 보장해준다.
<위 세개 주제 예제>
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
31
32
33
34
35
36
37
38
39
40
41
42 |
#include<iostream>
using namespace std;
class Shape {//순수 가상 함수를 포함하고 있는 클래스를 추상크래스라고 부른다.
public:
//가상 함수 선언
virtual void draw() = 0; //순수 가상함수 ㅣ 구현 코드없고 선언만 하는 함수
};
class Circle : public Shape {
//이 클래스는 추상클래스인 shape을 상속받았으므로, 반드시 순수가상함수인 draw()를 구현해야 한다.
public:
virtual void draw() { cout << "Circle을 그린다." << endl; }
};
class Rect : public Shape {
public:
virtual void draw() { cout << "Rect을 그린다." << endl; }
};
class Line : public Shape {
public:
virtual void draw() { cout << "Line을 그린다." << endl; }
};
int main() {
//Shape *pShape = new Shape();
//pShape은 Shape 클래스의 포인터이다.
//pShape->draw(); //Shape을 그린다.
//동적바인딩은 업캐스팅된 포인터로 오버라이딩된 파생클래스의 함수를 실행하도록 보장해준다.
Shape *pShape = new Circle();//업캐스팅
pShape->draw(); //Circle을 그린다. 함수중복(오버라이딩)되어 있는 걸 실행한다. 동적바인딩.
pShape = new Rect();
pShape->draw();
pShape = new Line();
pShape->draw();
return 0;
}
|
cs |
'객체 지향 프로그래밍 > 이론 정리' 카테고리의 다른 글
[C++]함수 중복과 static (0) | 2017.11.08 |
---|---|
[C++]함수와 참조, 복사 생성자 (0) | 2017.11.01 |
[C++]this 포인터, string 클래스 (0) | 2017.10.18 |
[C++]객체 포인터, 객체 배열,동적 메모리 할당 (0) | 2017.10.11 |
[C++]접근지정자, 인라인 함수, 구조체, 파일분리 (0) | 2017.09.27 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 파이썬 터틀
- 자료구조
- 버츄어박스
- 파이썬 for
- 자바 에센셜 실습문제
- 파이썬 함수
- 파이썬 while
- css
- 파이썬 문자열
- 명품 c++ 실습
- 파이썬 리스트
- 백준
- 자바
- 파이썬 예제
- 파이썬 선택문
- 파이썬 연산자
- 자바스크립트 자료구조
- css 그리드
- 파이썬 객체
- 파이썬 클래스
- css 박스
- 파이썬 진수 변환
- 자바스크립트 그래프
- 백준 11501
- 백준 1874
- 백준 10451
- 파이썬 단계적 개선
- 파이썬
- 웹
- 파이썬 if문
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함