강의 주제 : 바인딩과 오버로딩vs오버라이딩
강의 키워드(주요 단어) : 바인딩, 오버로딩, 오버라이딩, 정적(static)멤버변수, 가상함수, 순수가상함수
주요 내용 요약
가상함수(overriding)의 필요성, (최우선의 라는 뜻도 가지고 있다.)
클래스를 상속 받아서 쓰는데, 상속 받은 클래스의 함수 중 고치고 싶은 함수가 있을 때
기존 클래스의 모든 내용을 모두 현재 프로그램에 사용할 수 있는데, 특정 함수가 마음에 들지 않음
기존의 클래스를 고치느니 상속을 받고, 가상함수를 이용하여 기존의 함수를 고쳐서 사용
상속 받은 함수(부모)를 실행하지 않고 자신(자식)의 함수를 실행
가상함수의 구현을 중복(overriding)이라고 함
바인딩(binding)
- 변수와 함수에 대한 메모리 할당이나 함수 호출이 발생했을 때 실제로 처리해야하는 명령어들이 결정되는 시점
- 정적(static) 바인딩, early
└ 컴파일 시 변수의 위치와 함수가 실행할 명령이 결정되는 경우
└ static 변수, overloading
- 동적(dynamic) 바인딩, late
└ 실제 실행할 때(run time) 결정되는 경우
└ 지역변수, overriding
C++과 C에서 auto는 원래 같은 문법이였지만 C++11에서 auto는 기억클래스 지정자가 아닌 동적으로 타입을 정하게 바뀌었다.(stl 사용시 코드가 짧고 가독성이 좋아짐)
정적(static) 멤버변수
- 모든 객체가 공유하는 멤버변수
- 한 클래스로부터 객체가 여러개 만들어지더라도 멤버변수당 하나씩 생성됨
- 여러 객체들에서 공유해야하는 정보는 멤버변수로 선언함
cast연산자
- static_cast
- dynamic_cast : 안전한 downcasting (왠만해서는 잘 쓰이지 않음)
└ 부모 클래스의 포인터에서 자식 클래스의 포인터로 다운 캐스팅
- const_cast
- reinterpret_cast
- C/C++ cast 연산자
└ (type)(expression)
└ (double)x;
- C++ cast 연산자
└ 연산자<type>(expression)
└ static_cast<double>(x);
기본 클래스(base)
↑ : upcasting(문제x)
↓ : down casting
파생 클래스(Derived)
가상함수(virtual function)
- 오버라이딩을 구현하는 방법
- 동적(실행시) 바인딩, late binding
- 가상함수를 정의하기 위해서는 기본 클래스의 멤버함수 앞에 'virtual'이라는 키워드를 씀
- 가상함수는 하나의 이름(인터페이스)으로 여러 개의 수단과 방법을 제공하는 객체지향 프로그래밍의 다형성을 구현하는 한 방법
- 기본 클래스에서 상속 받았는데 파생 클래스에서 멤버함수를 재정의하는 이유는 어떠한 경우라도 기본클래스의 멤버함수를 버리고 파생 클래스의 멤버함수를 사용하려는 것
- 기존 클래스의 모든 내용을 모두 현재 프로그램에 사용할 수 있는데 특정 함수가 걸맞지 않을 경우, 기존의 클래스를 고치느니 상속을 받고 가상함수를 이용하여 마음에 들지 않는 함수만 고쳐서 사용함
순수가상함수(pure virtual function)
- 파생클래스에서 반드시 재정의를 해야함
- 순수가상함수를 갖는 클래스는 "추상클래스"라고 부름
- 추상클래스는 객체생성이 안된다.
감상 평
새로운 가상함수, overloading vs overriding의 개념을 배울 수 있어 재밌었다.
강의 이해도
75%
'C++' 카테고리의 다른 글
| 14주차 예습과제 (0) | 2024.12.03 |
|---|---|
| 13주차 강의 내용 (0) | 2024.11.26 |
| 12주차 강의내용 (0) | 2024.11.19 |
| 12주차 예습과제 (0) | 2024.11.18 |
| 11주차 강의 내용 (0) | 2024.11.12 |