산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> C 언어

C++ 상속 모델: 다중, 다단계, 계층형 상속 완벽 정리

C++ 상속 모델: 다중, 다단계, 계층형 상속

이 튜토리얼에서는 실전 코드 예제와 함께 C++ 상속 패턴인 다중 상속, 다단계 상속, 계층형 상속을 탐구합니다.

상속은 객체 지향 프로그래밍의 기초 기능입니다. 기존 클래스로부터 속성과 동작을 상속받아 새로운 클래스를 만들 수 있게 해줍니다.

아래에서 C++에서 사용 가능한 세 가지 핵심 상속 모델을 살펴봅니다.


C++ 다단계 상속

다단계 계층에서 클래스는 다른 파생 클래스로부터 파생됩니다. 기반 클래스에 도달할 때까지 체인이 계속됩니다.

class A {
    // 기반 클래스 구현
};
class B : public A {
    // B가 A로부터 상속
};
class C : public B {
    // C가 B로부터 상속
};

여기서 B는 A로부터 상속받고, C는 B로부터 상속받아 수직적인 상속 체인을 형성합니다.

예제 1: C++ 다단계 상속

#include <iostream>
using namespace std;

class A {
public:
    void display() {
        cout << "Base class content." << endl;
    }
};

class B : public A {};
class C : public B {};

int main() {
    C obj;
    obj.display();
    return 0;
}

출력

Base class content.

이 프로그램은 C 객체가 궁극적인 기반 클래스 A에 정의된 display()를 호출할 수 있음을 보여줍니다. B나 C에 오버라이딩 구현이 없기 때문입니다. 컴파일러는 가장 파생된 클래스부터 상속 체인을 거슬러 올라가며 호출을 해결합니다.


C++ 다중 상속

C++에서는 클래스가 둘 이상의 기반 클래스로부터 상속받을 수 있습니다. 예를 들어 Bat(박쥐)는 Mammal(포유류)과 WingedAnimal(날개 달린 동물) 양쪽에서 파생될 수 있습니다. 박쥐는 동시에 포유류이자 날개 달린 동물이기 때문입니다.

C++ 상속 모델: 다중, 다단계, 계층형 상속 완벽 정리

예제 2: C++ 다중 상속

#include <iostream>
using namespace std;

class Mammal {
public:
    Mammal() {
        cout << "Mammals can give direct birth." << endl;
    }
};

class WingedAnimal {
public:
    WingedAnimal() {
        cout << "Winged animals can flap." << endl;
    }
};

class Bat : public Mammal, public WingedAnimal {};

int main() {
    Bat b1;
    return 0;
}

출력

Mammals can give direct birth.
Winged animals can flap.

다중 상속에서 모호성 해결

두 기반 클래스가 같은 이름의 함수를 제공하면 컴파일러가 어느 것을 호출할지 결정할 수 없어 모호성 오류가 발생합니다.

class Base1 {
public:
    void someFunction() { /* ... */ }
};
class Base2 {
public:
    void someFunction() { /* ... */ }
};
class Derived : public Base1, public Base2 {};
int main() {
    Derived obj;
    // obj.someFunction(); // 오류: 모호함
}

범위 지정 연산자를 사용해 원하는 기반 클래스 함수를 지정하세요:

int main() {
    Derived obj;
    obj.Base1::someFunction(); // Base1 구현 호출
    obj.Base2::someFunction(); // Base2 구현 호출
}

C++ 계층형 상속

계층형 상속에서는 여러 파생 클래스가 단일 기반 클래스로부터 상속받습니다. 모든 공통 속성과 동작은 기반 클래스에 캡슐화되고, 각 파생 클래스는 자신만의 특수화를 추가할 수 있습니다.

예시로는 Physics, Chemistry, Biology가 Science로부터 파생되는 경우와 Dog, Cat, Horse가 Animal로부터 파생되는 경우가 있습니다.

계층형 상속 문법

class BaseClass {
    // 기반 클래스 내용
};
class DerivedOne : public BaseClass {
    // 추가 멤버
};
class DerivedTwo : public BaseClass {
    // 추가 멤버
};
class DerivedThree : public BaseClass {
    // 추가 멤버
};

예제 3: C++ 계층형 상속

// C++ 계층형 상속을 보여주는 프로그램
#include <iostream>
using namespace std;

// 기반 클래스
class Animal {
public:
    void info() {
        cout << "I am an animal." << endl;
    }
};

// 파생 클래스 1
class Dog : public Animal {
public:
    void bark() {
        cout << "I am a Dog. Woof woof." << endl;
    }
};

// 파생 클래스 2
class Cat : public Animal {
public:
    void meow() {
        cout << "I am a Cat. Meow." << endl;
    }
};

int main() {
    // Dog 인스턴스
    Dog dog1;
    cout << "Dog Class:" << endl;
    dog1.info();
    dog1.bark();
    // Cat 인스턴스
    Cat cat1;
    cout << "\nCat Class:" << endl;
    cat1.info();
    cat1.meow();
    return 0;
}

출력

Dog Class:
I am an animal.
I am a Dog. Woof woof.
Cat Class:
I am an animal.
I am a Cat. Meow.

Dog와 Cat 모두 Animal로부터 info() 메서드를 상속받으며, 각 클래스는 자신만의 특수 동작을 추가합니다.

C 언어

  1. C# 클래스와 객체: 견고한 OOP를 위한 기초 다지기
  2. C# 추상 클래스와 추상 메서드: 실전 가이드
  3. C# partial 클래스와 partial 메서드 이해하기
  4. C# sealed 클래스와 메서드: 상속/오버라이딩 제한으로 코드 안전성·성능 높이기
  5. C++ 클래스와 객체: 객체지향 프로그래밍 실전 가이드
  6. C++ 상속 접근 지정자: public, protected, private 완벽 이해
  7. C++ 프렌드 함수와 프렌드 클래스: 접근 제어 마스터하기
  8. C++ 구조체 vs 클래스: 핵심 차이, 문법, 최적 사용 사례
  9. C++ 저장 클래스 완벽 가이드: 범위, 수명, 용법
  10. C++ 날짜와 시간 완벽 가이드: ctime 라이브러리 활용