Coding/C++

(New) C++언어 공부 0010

  • -
728x90
반응형

1-1. 접근 제어 지정자

    

    

 

1-2. 상속에서의 생성자와 소멸자

    • 자식 클래스의 객체가 생성될 때, 부모 클래스의 생성자 또한 호출됨

    • 마찬가지로, 자식 클래스의 객체가 소멸될 때, 부모 클래스의 소멸자 또한 호출됨

    

 

1-3. 상속의 유형

    • 상속 선언 시 public, private, protected의 3가지 중 하나 지정

    • 기본 클래스의 멤버의 접근 속성을 어떻게 계승할지 지정

        • public : 기본 클래스의 protectedpublic 멤버를 그대로 계승

        • private : 기본 클래스의 protectedpublic 멤버를 private으로 계승

        • protected : 기본 클래스의 protectedpublic 멤버를 protected로 계승

        

 

1-4. 오버라이딩

    • 자식 클래스가 필요에 따라 상속된 함수를 다시 정의하는 것으로, 이를 통해 다형성(polymorphism)을 부여 가능

    

 

2. 다중 상속

    

    • 선언

    

    • 활용

    

    • 문제점

        • Base의 멤버가 이중으로 객체에 삽입

            • 동일한 x를 접근하는 프로그램이 서로 다른 x에 접근하는 결과

            • 가상 상속(상속 지정자 앞에 virtual 키워드 사용)이나 범위 지정자(상속받는클래스::멤버이름)를 이용하여 해결

        

    

 

3. 다형성

    • 객체들의 타입이 다르면 똑같은 메시지가 전달되더라도 서로 다른 동작을 하는 것

    • OOP에서 하나의 코드로 다양한 타입의 객체를 처리가능

    

    

 

3-1. 업 캐스팅

    • 자식 클래스 타입을 부모 클래스타입으로 변환

        • 즉, 파생 클래스 포인터가 기본 클래스 포인터에 치환되는 것

        • 예) 사람을 동물로 봄

        

    • 예제

    

    

 

3-2. 다운 캐스팅

    • 부모 클래스 타입을 자식 클래스타입으로 변환

        • 즉, 기본 클래스의 포인터가 파생 클래스의 포인터에 치환되는 것

    • 예제

    

    

 

4. 가상 함수

    • 만약 부모 클래스의 포인터를 통하여 멤버 함수를 호출하더라도, 자식 클래스의 종류에 따라서 서로 다른 이름이 같은 함수가 호출되도록 하는 것

    • virtual 키워드로 선언된 멤버 함수

    

        • virtual 키워드는 동적 바인딩 지시어

        • 컴파일러에게 함수에 대한 호출 바인딩을 실행 시간까지 미루도록 지시

 

4-1. 동적 바인딩

    • 바인딩이 실행 시까지 연기되고 실행 시간에 실제 호출되는 함수를 결정하는 것

    

    • 정적 바인딩 : 컴파일 단계에서 호출하는 함수를 결정하는 것이 모두 완료되는 것

 

4-2. 다형성 예제

    

 

4-3. 오버라이딩

    • 파생 클래스에서 기본 클래스의 가상 함수와 동일한 이름의 함수 선언 및 정의

        • 기본 클래스의 가상 함수의 존재감 상실시킴

        • 파생 클래스에서 오버라이딩한 함수가 호출되도록 동적 바인딩

        • 함수 재정의라고도 부름

        

    • 특징

        • 가상 함수의 이름, 매개 변수 타입과 개수, 리턴 타입이 모두 일치

        • 오버라이딩 시 virtual 지시어 생략 가능

        • 가상 함수의 virtual 지시어는 상속됨, 파생 클래스에서 virtual 생략 가능

        • 가상 함수의 접근 지정

        • private, protected, public 중 자유롭게 지정 가능

    • 목적

        • 파생 클래스에서 구현할 함수 인터페이스 제공

        • 다형성의 실현

        

 

4-4. 오버로딩 vs 오버라이딩

    

    

 

4-5. 가상 소멸자

    • 다형성을 사용하는 과정에서 소멸자를 virtual로 해주지 않으면 문제가 발생

        • 자식 클래스의 소멸자가 호출되지 않음

    • 부모 클래스의 소멸자를 virtual로 선언하면 문제 해결

    

    

 

4-6. 순수 가상 함수

    • 함수 선언만 존재하고 함수의 정의는 없는 함수

    • 실행할 코드를 작성할 목적이 아님

    • 사용 방법

    

 

4-7. 추상 클래스

    • 순수 가상 함수를 하나라도 가지고 있는 클래스

        • 추상 클래스의 모든 멤버 함수를 순수 가상 함수일 필요는 없음

    • 온전한 클래스가 아니므로 객체 생성 불가능

        • 추상 클래스의 포인터는 선언 가능

    • 상속에서 기본 클래스의 역할을 하기 위함

    • 순수 가상 함수를 통해 파생 클래스에서 구현할 함수의 형태(원형)을 보여주는 인터페이스 역할

    • 추상 클래스를 단순 상속하면 자동 추상 클래스

    • 추상 클래스를 상속받아 순수 가상 함수를 오버라이딩

        • 파생 클래스는 추상 클래스가 아님

        

    

    

728x90
반응형

'Coding > C++' 카테고리의 다른 글

(New) C++언어 공부 0011  (0) 2024.08.30
(New) C++언어 공부 0009  (0) 2024.08.29
(New) C++언어 공부 0008  (0) 2024.08.29
(New) C++언어 공부 0007  (2) 2024.08.29
(New) C++언어 공부 0006  (0) 2024.08.29
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.