본문 바로가기
C++/C++ 문법

C++ 상속성 개념 및 다중 상속

by Sein_ 2025. 10. 14.
728x90

[Do it C++ 완전정복_ 239~242p]

상속성 (Inheritance)

  • 기존 클래스(부모/기반 클래스)의 속성과 기능을 새로운 클래스(자식/파생 클래스)가 물려받아 재사용하는 것을 말한다.
  • 자식 클래스는 부모 클래스의 멤버(변수, 함수)를 그대로 사용할 수 있고, 필요에 따라 기능을 추가하거나 재정의(오버라이딩) 할 수도 있다.

상속 선언 방법

class 자식클래스 : 접근지정자 부모클래스 { ... };

 

#include <iostream>
using namespace std;

class Parent {
public:
    void show() { cout << "Parent" << endl; }
};

class Child : private Parent {  // private 상속
public:
    void display() { show(); }  // 내부에서는 접근 가능
};

int main() {
    Child c;
    // c.show(); 불가 (private 상속으로 외부 접근 불가)
    c.display(); // 가능 (자식 클래스 내부에서는 가능)
}

 

상속 원칙 - 리스코프 치환 원칙 (LSP)

자식 클래스는 언제나 부모 클래스로 대체될 수 있어야 한다

→ 부모 클래스의 참조나 포인터로 자식 객체를 다뤄도 정상적으로 동작해야 함

 

 

 

다중 상속

하나의 자식 클래스가 둘 이상의 부모 클래스를 동시에 상속받는 것을 말한다.

class A { public: void funcA() { cout << "A" << endl; } };
class B { public: void funcB() { cout << "B" << endl; } };

// 다중 상속
class C : public A, public B {
public:
    void funcC() { cout << "C" << endl; }
};

int main() {
    C obj;
    obj.funcA(); // A의 멤버 사용
    obj.funcB(); // B의 멤버 사용
    obj.funcC(); // 자신의 멤버 사용
}

 

 

 

다중 상속 주의사항

여러 부모 클래스에 동일한 이름의 함수나 멤버가 있을 경우 컴파일러가 어느 쪽을 호출해야 하는지 판단하지 못한다.

→ 인터페이스(순수 가상 클래스) 형태로 다중 상속을 사용할 것