본문 바로가기

C++

[C++] 상속(inheritance)

이번 시간에는 상속에 대해서 알아보겠습니다.

 

 

아래는 간단한 상속 관계의 샘플 코드입니다.

 

#include <iostream>

class Base
{
    std::string s;

public:
    Base() : s("기반") { std::cout << s << " 클래스 constructor" << std::endl; }
    void what() { std::cout << s << " 클래스 변수" << std::endl; }
};

class Derived : public Base
{
    std::string s;

public:
    Derived() : Base(), s("파생")
    {
        std::cout << s << " 클래스 constructor" << std::endl;

        // Base 에서 what() 을 물려 받았으므로
        // Derived 에서 당연히 호출 가능하다
        what();
    }
};

int main()
{
    std::cout << " === 기반 클래스 생성 ===" << std::endl;
    Base p;

    std::cout << " === 파생 클래스 생성 ===" << std::endl;
    Derived c;

    return 0;
}

 

실행 결과 - 기반 클래스의 what 함수가 실행되면서 기반 클래스 변수 값이 출력된다.

 

 

 

아래와 같이 파생 클래스 내부에 what 함수를 추가하면 어떻게 되는지 확인해 봅시다.

 

class Derived : public Base
{
    std::string s;

public:
    Derived() : Base(), s("파생")
    {
        std::cout << s << " 클래스 constructor" << std::endl;

        // Base 에서 what() 을 물려 받았으므로
        // Derived 에서 당연히 호출 가능하다
        what();
    }
    // 파생 클래스 내부에 what 함수를 추가.
    void what() { std::cout << s << " 클래스 변수" << std::endl; }
};

 

실행 결과 - 당연한 결과로 파생 클래스 변수가 호출된다. 이것을 우리는 오버라이딩(overriding) 이라고 합니다.