언어 자료구조 알고리즘/Escort C++

[C++} 4. 1 일반화 (Generalization) 관계

언제나휴일 2016. 4. 15. 13:20
반응형

4. 클래스간의 관계


 프로그래밍 개발 공정에서 설계 단계에서는 사용자가 정의하는 형식들 사이에 관계를 정의하는 작업이 수반됩니다. 이번 장에서는 사용자가 정의하는 형식 클래스 간의 관계에 관해 얘기를 하려고 합니다.

 

4. 1 일반화 (Generalization)

 

 음악가와 피아니스트와 같이 "피아니스트는 음악가이다."라는 논리적 관계를 형성하는 관계를 일반화 혹은 파생 관계(Derivation)라 합니다. 이와 같은 일반화 관계에 있을 때 기반이 되는 클래스에 정의되어 있는 멤버를 파생 클래스에서는 상속을 받게 되며 OOP의 중요한 특징 중의 하나라고 할 수 있습니다.


일반화 관계 상속 파생

[그림 4.1]

 

 이러한 일반화 관계에 대한 자세한 설명은 5장에서 설명을 하기로 하고 여기에서는 간단한 언급만 하기로 하겠습니다. 

 

 다음의 예제 코드는 기반 클래스 Musician에서 파생 클래스 Pianist를 정의하는 예제입니다. 예제 코드를 보시면 기반 클래스인 Musician에는 name 멤버 필드가 있고 Play라는 메서드에서 "홍길동 연주하다."와 같은 형태로 화면에 에코하게 구현하였습니다. 파생 클래스인 Pianist 클래스는 Musician이 기반 클래스임을 명시하였습니다. 그리고 기반 클래스인 Musician에는 매개 변수가 없는 기본 생성자가 없으므로 초기화 기법을 사용해야 합니다. 파생 클래스 내에서 Play라는 메서드를 정의한 것이 없지만 기반 클래스에 정의되어 있으므로 Pianist 개체에서 Play 메서드를 호출하여 사용할 수 있습니다.

 

 파생 클래스에서 기반 클래스를 정의하는 방법은 다음의 예처럼 클래스 명 뒤에 콜론(:) 연산자를 붙이고 상속에 따른 액세스 수준과 기반 클래스 명을 명시하면 됩니다. 상속 수준에 관한 얘기는 5장에서 하기로 하겠습니다.

 

 

class Pianist :    public Musician

{

   ... 중략...

};

 

 초기화 기법을 사용하는 것은 멤버 필드 초기화 기법과 비슷합니다. 소스 파일에 생성자 메서드 구현에서 메서드 명 뒤에 :를 뒤에 기반 클래스 명과 입력 인자를 넣어주면 됩니다.

 

Pianist::Pianist(string _name):Musician(_name)

{

}

 

 

Musician.h - 기반 클래스

#pragma once

 

#include <iostream>

#include <string>

using std::cout;

using std::endl;

using std::string;

class Musician

{

    string name;

public:

    Musician(string _name);

    void Play();

    virtual ~Musician(void);

};

 

 

Musician.cpp

#include "Musician.h"

 

Musician::Musician(string _name)

{

    name = _name;

}

 

Musician::~Musician(void)

{

}

void Musician::Play()

{

    cout<<name<<" 연주하다."<<endl;

}

  

Pianist.h - 파생 클래스

#pragma once

#include "musician.h"

 

class Pianist :

    public Musician

{

public:

    Pianist(string _name);

    ~Pianist(void);

};

 

 

Pianist.cpp

#include "Pianist.h"

 

Pianist::Pianist(string _name):Musician(_name)

{

}

 

Pianist::~Pianist(void)

{

}

 

 

Program.cpp

#include "Pianist.h"

 

void main()

{

    Pianist *pianist = new Pianist("김태원");

    pianist->Play();

    delete pianist;

}

 

 

4장 래스

(모든 동영상 강의는 무료입니다.)

반응형