C++

[강의] 11월 7일 수업정리

k-codestudy 2024. 11. 8. 03:01

상속에 대한 수업을 들었다.

 

1. C++ 상속에 대한 정리

C++에서 상속은 부모 클래스(Parent)를 기반으로, 그보다 더 구체적인 자식 클래스(Child)를 만드는 기법이다.

상속의 핵심은 단순히 코드 재사용이 아닌 구체화와 추상화의 관계를 통해 객체의 특성을 확장하는 것이다.

자식 클래스는 부모의 특징을 물려받으며, 부모 클래스와 자식 클래스 사이의 관계는 "is-a" 관계라고 표현한다.

is-a 관계는 간단히 말하면 부모 클래스는 자식 클래스이다 라는 개념이다.

예를 들어, 개(Dog)는 동물(Animal)이다라는 개념에서 개는 동물을 상속받는 구체화된 객체이다.

 

2. 상속의 개념 정리

2.1 확장성

  • 상속을 통해 부모 클래스의 기능과 특성을 더 구체화할 수 있다. 예를 들어, Animal이란 추상적인 개념에 대해 Dog나 Cat과 같은 구체적인 특성을 추가하여 확장한다.

2.2 코드 재사용 

  • 상속은 재사용을 위한 기법이 아니지만, 부모 클래스의 구현을 자신 클래스에서 사용할 수 있어서 자연스럽게 코드가 재사용된다.

2.3 Is-a 관계

  • 자식 클래스는 부모 클래스의 특성을 상속받고, 부모 클래스의 특성과 자산을 그대로 사용할 수 있다. 즉, Dog는 Animal이다 라는 관계를 코드로 표현할 수 있다.

2.4 추상화와 구체화의 필요성

  • 상속은 구체적인 설계가 필요한 영역이며, UML 클래스 다이어그램을 통해 관계를 시각화하는 것이 중요하다.
  • 코드를 통해 일반적인 부모 - 자식 관계를 명확히 파악할수는 없으므로 클래스 다이어그램을 통해 명확히 확인하는 것이 좋다

 

3. 예제 코드

 

3.1 부모 클래스 정의

부모 클래스는 상위 개념인 C_PARENT로 기본적인 print() 기능을 포함한다.

 

 [parent.h]

#pragma once
#include <stdio.h>

class C_PARENT {
public:
    void print();
};


[ parent .cpp]

#include "parent.h"

void C_PARENT::print() {
    printf("부모 클래스 기능\n");
}

 

3.2 자식 클래스 정의

C_CHILD 클래스는 C_PARENT 클래스를 상속받아 print() 기능을 사용할 수 있다.

[ child.h ]

#pragma once
#include "parent.h"

class C_CHILD : public C_PARENT {
    // C_PARENT의 print() 기능을 상속받음
};

 

3.3 메인 함수 예제

자식 클래스 객체를 생성하고 부모의 기능을 호출한.

#include <iostream>
#include "child.h"

int main() {
    C_CHILD cChild;
    cChild.print(); // 부모 클래스 기능 출력
}

 

 

 

4. 상속을 통한 Is-a 관계 예제

C_ANIMAL이라는 추상적인 클래스를 정의하고 이를 상속하여 C_DOG과 C_CAT을 구체화한다.

상속을 통해 서로 다른 클래스 타입(C_DOG과 C_CAT)을 C_ANIMAL* 포인터로 관리할 수 있게 된다.

#include <iostream>

class C_ANIMAL {
    // 동물이라는 추상적인 부모 클래스
};

class C_DOG : public C_ANIMAL {
    // 개라는 구체화된 자식 클래스
};

class C_CAT : public C_ANIMAL {
    // 고양이라는 구체화된 자식 클래스
};

int main() {
    C_DOG cDog;
    C_CAT cCat;

    C_ANIMAL* pAnimal = nullptr;

    pAnimal = &cDog; // 개는 동물이다
    pAnimal = &cCat; // 고양이도 동물이다

    // 서로 다른 객체(C_DOG, C_CAT)를 동일한 부모 클래스 포인터로 참조 가능
}

정리

  • 상속은 객체 지향 프로그래밍에서 부모-자식 간의 "is-a" 관계를 표현하기 위한 중요한 기법이다.
  • 자식 클래스는 부모의 특성을 모두 물려받으며, 이를 통해 구체적인 특성으로 확장된다.
  • 상속은 단순히 코드 재사용을 위한 것이 아니라 추상화된 부모 개념을 구체화하고 특성을 확장하여 좀 더 현실에 가까운 모델링을 가능하게 한다.

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

[강의] 11월 12일 수업정리  (6) 2024.11.13
[강의] 11월 8일 수업정리  (1) 2024.11.10
[강의] 11월 6일 수업정리  (0) 2024.11.07
[강의] 11월 5일 수업정리  (3) 2024.11.05
[강의] 11월 1일 수업정리  (0) 2024.11.03