Cpp 09. Class Inheritance

oat·2024년 2월 29일

C++

목록 보기
10/10

Section 09

상속 기본

상속이란?

객체지향 프로그래밍에서 가장 중요한 목적 중 하나는 재사용할 수 있는 코드를 제공하는 것이다
C++와 클래스는 더 높은 수준의 재활용성을 제공한다
그것이 바로 상속 기능이다

기초 클래스

어떤 클래스를 다른 클래스로부터 상속할 때, 기존 클래스

파생 클래스

어떤 클래스를 다른 클래스로부터 상속할 때, 상속받는 클래스

파생 클래스 정의 방법

class 파생클래스이름 : public 기초클래스이름 {
	// code
}

상속 구현하기

  1. 파생 클래스형의 객체 안에는 따로 선언해 주지 않아도 기초 클래스형의 데이터 멤버들이 저장된다
  2. 파생 클래스형의 객체는 기초 클래스형의 메서드들을 사용할 수 있다
  3. 파생 클래스는 자기 자신의 생성자를 필요로 한다
  4. 파생 클래스는 부가적인 데이터 멤버들과 멤버 함수들을 임의로 추가할 수 있다

문제점

파생 클래스는 기초 클래스의 public 멤버 함수들에게 접근할 수 있으나, private 멤버 변수들에게는 접근할 수 없다

더 근본적으로 들어가면,
프로그램은 먼저 기초 클래스의 객체를 생성하고 기초 클래스의 객체에 덧붙이는 방법으로 파생 클래스의 객체를 생성한다

즉, 프로그램이 파생 클래스의 생성자 안으로 들어가기 이전에 기초 클래스의 객체가 먼저 생성된다는 것이다

C++은 이를 실행하기 위해 멤버 초기자 리스트 문법을 사용한다

멤버 초기자 리스트 문법
파생클래스 :: 힘수() : 기초클래스(){
}

파생클래스 :: 함수(int h, int m, int d) : 기초클래스(h, m) {
}

": 기초클래스(~)" 부분이 멤버 초기자 리스트이다


Public 다형 상속

다형이란?

함수가 처해지는 상황에 따라서 동작을 달리하는 것

public 다형 상속

  1. 기초 클래스 메소드를 파생 클래스에서 다시 정의한다
  2. 가상 메서드를 사용해야 한다

가상 메서드 (virtual)

메서드에 virtual 이라는 키워드가 붙으면 가상 메서드가 된다
가상 메서드는 프로그램에게 서로 독립된 두 개의 메서드 정의가 있다는 것을 알려주게 되고, 프로그램은 함수가 호출되었을 때 이를 호출한 클래스의 객체를 따져서 그에 대응되는 함수를 선택한다

상속을 위해 기초 클래스로 사용할 클래스를 정의할 때,
파생 클래스에서 다시 정의해야 하는 클래스 함수는 가상 함수로 선언해야 한다

가상 메서드의 선언

아래와 같이 기초 클래스에서 virtual 키워드를 붙여주면 된다

class 기초클래스
{
private:
	// ~~~

public:
	// ~~~
	virtual void 함수();
};

기초 클래스에서 가상 메서드를 선언하게 된다면,
그 함수는 기초 클래스 및 파생 클래스까지 계속해서 가상 함수로 정의된다


동적결합

동적결합이란?

객체에 대한 참조 혹은 객체를 지시하는 포인터를 사용하여서 가상 메서드가 호출된다면, 참조나 포인터를 위해 함수가 사용되는 것이 아니라 그 객체를 위해 정의된 메서드를 사용한다

0개의 댓글