저번주에 보고 간 내용
● 기본 클래스와 상속 클래스
● 상속접근제어
● protected멤버
● 상속에서 생성자와 소멸자
● 계층적 다중 상속
● 여러개의 기본 클래스 상속
이번주에 보고 갈 내용
● 상속 심화
● 바인딩
● 오버로딩과 오버리딩
● 정적 멤버변수
● 가상 함수 ( virtual function static ) , 순수 가상함수
13-1. 기본적인 2개 기본 클래스 상속 1
13-2. 기본적인 2개 기본 클래스 상속 2
13-3. 여러개의 기본 클래스를 상속받을때, 생성자와 소멸자의 실행 순서
앞의 4번과 5번은 쓸데없이 복잡하므로 무리하게 이해하려 하지 않는것을 추천합니다.
체감상 기말고사때 이 두개와 관련된 문제가 거의 하나씩은 나옵니다. (경험자로써)
물론 똑같이 나온다는건 아니고, 이거와 비슷하게는 거의 나온다고 보면 됩니다.
13-4. 이름과 전화번호 관리 (기본클래스 name , 파생 클래스 phone)
13-5. 비행기의 대한 정보를 저장하는 계층적 클래스
● 기본 클래스 Airship 운반할 수 있는 여행객의 수와 짐을 저장
● Airship으로부터 파생된 클래스 Airplane 엔진의 종류(프로펠러 또는 제트)와 운항 거리 저장
● Airship으로부터 파생된 클래스 Balloon 기구를 들어올리는데 사용되는 가스의 종류(수소 또는 헬륨)와 최대 고도 저장
가상함수(virtual function)의 필요성
● 클래스를 상속 받아서 쓰는데, 상속 받은 클래스의 함수 중 고치고 싶은 함수가 있을 때
● 기존 클래스의 모든 내용을 모두 현재 프로그램에 사용할 수 있는데, 특정 함수가 마음에 들지 않음
● 기존의 클래스를 고치느니 상속을 받고, 가상함수를 이용하여 기존의 함수를 고쳐서 사용
● 상속 받은 함수(부모)를 실행하지 않고 자신(자식)의 함수를 실행
● 가상함수의 구현을 중복(overriding)이라고 함
오버라이딩, 가상 함수 구현
● 가상함수는 기본(부모) 클래스 내에서 정의된 멤버함수를 파생(자식) 클래스에서 재정의하고자
할 때 사용한다.
● 기본 클래스의 멤버함수와 같은 이름의 함수를 파생 클래스에서 재정의하여 사용한다.
● 파생 클래스 내에서 가상함수의 재정의는 함수 중첩 기능과 비슷하지만 파생 클래스에서 재정의되는 가상함수는 기본 클래스와 함수의 리턴값, 매개변수 개수, 형이 완전히 같아야 한다.
바인딩 (binding)
● 변수와 함수에 대한 메모리 할당이나 함수 호출이 발생했을 때 실제로 처리해야 하는
명령어들이 결정되는 시점
● 정적(static) 바인딩, early
→ 컴파일시 변수의 위치와 함수가 실행할 명령이 결정되는 경우
→ static 변수, overloading
● 동적(dynamic) 바인딩, late
→ 실제 실행할 때(run time) 결정되는 경우
→ 지역 변수, overriding
13-6. 동적 바인딩(지역 변수)과 정직 바인딩(static 변수)
13-7. 정적 (static) 멤버변수와 특징
● 클래스의 멤버 변수 선언문에 static이라는 키워드 붙임
● 객체들이 정보를 공유할 목적으로 사용하는 변수
● C언어의 static변수와 의미가 다름
● 모든 객체가 공유하는 멤버변수
● 한 클래스로부터 객체가 여러 개 만들어지더라도 이 멤버변수는 하나만 생성됨
● 여러 객체들에서 공유해야 하는 정보는 정적 멤버변수로 선언
13-8. 정적 (static) 멤버변수
• 마우스가 눌린 좌표를 저장하는 Point클래스 구현
• 마우스를 누를 때 마다 좌표 값을 저장하기 위해 객체 생성
• 눌린 좌표 값 저장하기 위해 멤버변수
x, y선언
• 눌린 횟수를 저장하는 정적 멤버변수 count 선언
• 클래스 선언이 기억 장소를
할당하는 것이 아니므로 정적
멤버변수는클래스 밖에서 초기화를 함
(정의함, 초기화 값이 없으면 0으로 초기화 됨)
• 실행시(동적 바인딩) p1, p2, p3 객체가 만들어지면서 각각의 x와 y가 스택에 할당
• 컴파일시(static 바인딩) count의 값이 하나 만들어짐
가상함수 (virtual function)
● 오버라이딩을 구현하는 방법
● 동적(실행시) 바인딩, late binding
● 가상함수를 정의하기 위해서는 기본 클래스의 멤버함수 앞에 'virtual'이라는 키워드를 씀
● 가상함수는 하나의 이름(인터페이스)으로 여러 개의 수단과 방법을 제공하는 객체지향 프로그래밍의 다형성을
구현하는 한 방법
● 기본 클래스에서 상속 받았는데 파생 클래스에서 멤버함수를 재정의하는 이유는 어떠한 경우라도 기본클래스의
멤버함수를 버리고 파생 클래스의 멤버함수를 사용하려는 것
● 기존 클래스의 모든 내용을 모두 현재 프로그램에 사용할 수 있는데 특정 함수가 걸맞지 않을 경우, 기존의 클래스를
고치느니 상속을 받고 가상함수를 이용하여 마음에 들지 않는 함수만 고쳐서 사용함
가상함수 형식
13-9. static binding (overloading)
13-10. dynamic binding (overriding)
13-11. 순수 가상 함수
● 순수가상함수는 파생클래스에서 반드시 재정의 해야 함
● 순수가상함수를 갖는 클래스를 추상클래스라 함
● 추상클래스는 객체를 생성할 수 없음
● 부모 클래스의 포인터는 이 클래스로부터 파생된 어떤 자식 객체도 가리킬 수 있다.
● 가상 함수를 호출할 때 기본 클래스의 포인터 p가 가리키는 객체의 클래스에 따라 자동적으로 해당 클래스에
소속된 멤버 함수를 호출한다.
13-12. virtual 있을때와 없을때 차이
해당 내용은 인덕대학교 2021년도 2학기 C프로그래밍 한성현 교수님 강좌에서 발췌한 내용입니다.
강좌 내용을 원저작자 허락없이 무단 이용시, 처벌의 대상이 될수 있습니다.
'C > C++' 카테고리의 다른 글
C++ (15주) [ 콘솔 / 파일 입출력 ] (2) | 2022.11.02 |
---|---|
C++ (14주) [템플릿 , STL , friend , 예외처리] (0) | 2022.10.27 |
C++ (12주) [상속 1] (0) | 2022.10.15 |
C++ (11주) [연산자 중첩] (0) | 2022.10.07 |
C++ (10주) [ 함수 중첩 , 디폴트 인자 ] (0) | 2022.10.01 |
댓글