클래스와 상속

A Code AM·2020년 3월 21일
0

모르고 썼다

목록 보기
5/7

클래스(class)
: 객체를 정의하는 틀 혹은 설계도 -> 객체를 찍어낸다.

클래스는 객체의 상태(데이터)를 나타내는 필드(field)
객체의 행동(함수)을 나타내는 메소드(method)로 구성된다.
필드는 클래스에 포함된 변수(variable)를 의미하고 메소드는 어떠한 특정 작업을 수행하기 위한 명령문의 집합이다.

객체 생성 순서
1. 메모리 할당
2. 베이스 클래스 생성자 실행
3. 자식 클래스 생성자 실행
객체 소멸 순서
1. 자식 클래스 소멸자 실행
2. 베이스 클래스 소멸자 실행
3. 메모리 반환 (해제)
즉, 둘이 반대

인스턴스(instance)
: 해당 클래스 타입의 객체. 즉, 메모리에 할당된 객체를 의미함.
클래스로부터 객체를 선언하는 과정을 클래스의 인스턴스화라고 한다.

상속(inheritance)란
기존 클래스에 기능 추가하거나 재정의해서 새로운 클래스를 정의하는 것.
기존 정의 클래스 : 부모 클래스(parent class), 상위 클래스(super class), 기초 클래스(base class)
상속된 클래스 : 자식 클래스(child class), 하위 클래스(sub class), 파생 클래스(derived class)

상속의 장점

  1. 기존 클래스 재활용
  2. 자식 클래스들끼리 중복되는 멤버를 미리 부모 클래스에 작성해 놓으면 자식에선 해당 멤버 작성하지 않아도 된다.
  3. 클래스 간의 계층적 관계를 구성함으로써 다형성의 문법적 토대 마련

파생 클래스가 상속받는 기초 클래스가 하나이면 단일 상속(single inheritance)
만약 여러 개의 기초 클래스를 상속받으면 다중 상속(multiple inheritance)

추상 클래스
: 다른 형식의 기반 클래스로만 사용할 수 있고 개체를 생성할 수 없는 클래스
C++에서는 멤버 메서드 중에서 순수 가상 메서드를 하나라도 갖고 있는 클래스는 추상 클래스다

순수 가상 메서드는 virtual 키워드로 메소드를 선언하고 메소드 내부 정의를 하지 않겠는다는
"=0;"를 표시한 메소드를 말함.

virtual void Play() = 0;

기반 형식에 순수 가상 메서드가 있을 때 파생 형식에서 이를 재정의하지 않으면 파생 형식도 추상 클래스다. 따라서 파생 형식을 구상 클래스로 만들기 위해서는 반드시 기반 형식에 순수 가상 메소드를 재정의 해야 한다.

가상 소멸자(virtual destructor) : 상속시 발생될 수 있는 메모리 누수 현상 차단

virtual ~First()

클래스에 가상함수가 포함되어 있으면 가상함수 테이블이 생성된다.
가상함수 테이블: 실제 호출되어야할 함수의 위치정보를 담고 있는 테이블

profile
배움기록

0개의 댓글