cpp 04

jiwoo·2022년 12월 22일
0

cpp

목록 보기
5/9

CPP 04

생성일: 2022년 12월 3일 오후 11:02
최종 편집 일시: 2022년 12월 10일 오후 12:08
태그: cpp
cpp notion

CPP MODULE 04

  • Subtype polymorphism, abstract classes, interfaces
  • 서브타입 다형성(오버라이딩), 추상 클래스, 인터페이스

ex00 Polymorphism

다형성 !

  • 다형성이란
    • 프로그램 언어의 다형성은 그 프로그래밍 언어의 자료형 체계의 성질을 나타내는 것으로, 프로그램 언어의 각 요소들이 다양한 자료형에 속하는 것이 허가되는 성질을 가리킨다.
    • 하나의 객체가 여러 가지 타입을 가질 수 있는 것을 의미
    • 서브타입 다형성 = 오버라이딩
      • 상속받는 클래스의 함수를 다르게 동작하도록 재정의, 오버라이딩 하는 것.
  • 가상 함수
    • virtual void makeSound( void ) const;
    • C++에서 가상 함수(virtual function)는 파생 클래스에서 재정의할 것으로 기대하는 멤버 함수를 의미한다.
      이러한 가상 함수는 자신을 호출하는 객체의 동적 타입에 따라 실제 호출할 함수가 결정됩니다.
    • 포인터의 타입(클래스)이 아닌 포인터가 가리키는 객체의 타입에 따라 멤버함수를 선택하게 된다. https://dbstndi6316.tistory.com/298
    • 동적 바인딩
      • c++에서 가상함수가 아닌 멤버 함수는 모두 정적바인딩(컴파일 타임에 고정된 메모리주소로 변환)
      • 동적바인딩을 통해 객체의 타입에 따라 멤버함수를 선택
    • 가상함수테이블
    • http://www.tcpschool.com/cpp/cpp_polymorphism_virtual
    • 가상소멸자
      • 클래스를 동적할당 하고 해제할 때, 부모의 소멸자가 가상소멸자가 아닐 경우 실제 객체의 클래스가 아닌, 생성된 포인터의 자료형의 소멸자가 호출된다.

ex01 I don’t want to set the world on fire

포인터 멤버 변수와 얕은 복사, 깊은 복사.

  • 포인터 멤버 변수
    • 생성자에 new 할당
    • 소멸자에 delete
    • 클래스가 포인터 멤버 변수를 가지고 있을 때 주의 할 점은 객체를 복사할 때 깊은 복사를 해야한다는 것이다.
    • 깊은 복사
      • 포인터 주소를 복사하는 것이 아닌, 포인터 주소안의 값을 복사를 하는 것
    • 앝은 복사
      • 포인터 주소를 복사.
      • 두개의 객체가 같은 주소를 갖고 있게되어 각각의 소멸자를 불러와 같은 주소에 두번 delete가 실행된다.

ex02 Abstract class

추상클래스, 순수 가상 함수

  • 추상 클래스
    • 순수 가상 함수가 한개라도 있으면 추상클래스가 된다.
    • 순수 가상 함수
      • 기초클래스에서 선언만되고 정의되지 않는다.
      • 파생클래스에서 오버로딩, 정의 되어야한다.
      • virtual void makeSound( void ) const = 0;
    • 순수 가상 함수가 있기 때문에 추상 클래스 자체로 객체를 만드는 것은 불가능하다.
    • 상세 클래스
      • 상속받는 순수클래스의 모든 가상 함수를 정의한 클래스.

ex03 Interface & recap

인터페이스

  • 인터페이스
    • 가상 소멸자와 순수 가상함수만 포함하고 있는 클래스

0개의 댓글