이제 OOP의 세 가지 주요 특징인 캡슐화, 상속, 다형성 중에 상속에 관해 알아볼게요.
상속은 다른 형식에 정의한 것을 마치 자신에서 정의한 것처럼 만드는 OOP의 특징입니다. 이러한 관계를 UML에서는 일반화 관계라 부르고 삼각형과 실선으로 관계를 표시합니다.
일반화 관계는 “피아니스트는 음악가이다.”처럼 “이다.(is a)”로 나타낼 수 있는 관계입니다. 이 때 음악가처럼 일반적인 클래스를 기반 클래스라 말하며 피아니스트처럼 특수한 클래스를 파생 클래스라 부릅니다.
C++에서 일반화 관계를 표현할 때 파생 문법을 이용합니다. 파생 문법은 파생 클래스를 정의할 때 기반 클래스를 다음처럼 나타냅니다.
class Pianist : public Musician { };
파생 클래스를 정의하면 기반 클래스에 정의한 것도 자신의 내부에 정의한 것처럼 멤버를 상속받습니다.
예를 들어 음악가 클래스에서 “연주하다.” 기능을 정의하면 파생 클래스 피아니스트에는 기반 클래스의 멤버를 상속받아 “연주하다.” 기능을 정의한 것처럼 사용할 수 있습니다.
//상속 개요 #include <iostream> #include <string> using namespace std; class Musician { public: void Play() { cout<<"딩동댕"<<endl; } }; class Pianist: public Musician //Musician 클래스를 기반으로 파생한 Pianist 클래스 정의 { }; int main() { Pianist *pianist = new Pianist(); pianist->Play(); delete pianist; return 0; }
▷ 실행 결과
딩동댕