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

[C++] 일반화 관계와 파생

언제나휴일 2016. 4. 15. 14:06
반응형

5.1 일반화 관계

 

 일반화 관계는 음악가와 피아니스트처럼 피아니스트는 음악가이다.라는 논리적 관계를 형성하는 관계를 말합니다. C++에서는 이와 같은 관계를 효과적으로 사용할 수 있도록 파생에 관련한 문법을 제공하고 있으며 이러한 특징은 OOP의 상속에 속합니다.


일반화 관계

 

[그림 5.1]

 

5.1.1   일반화 관계와 파생

 

 C++에서 일반화 관계를 표현할 때 파생에 관련된 문법을 이용합니다. 파생을 표현할 때는 파생 클래스에서 어느 클래스를 기반 클래스로 할 것인지를 다음과 같이 명시하면 됩니다.

 

class Derived : public Base

{

};

 

파생을 표현할 때 기반 클래스의 접근 지정된 것을 파생된 것에서 그대로 계승하고자 할 때 public 키워드를 명시하면 기반 클래스의 각 멤버의 접근 지정도 동일하게 적용됩니다. , 기반 클래스의 private으로 지정된 멤버들은 파생 클래스에서는 가시성이 없게 됩니다.

 

간단하게 파생을 표현하는 예를 보여 드리겠습니다. 음악가 클래스를 기반 클래스로 약속하고 이를 기반으

파생된 피아니스트 클래스를 정의하려 합니다. 음악가 클래스에서는 연주하다인사하다는 멤버 메서드가 있고 피아니스트에서는 조율하다는 멤버 메서드가 있게 구현할 것입니다.

 

그리고 이를 사용하는 테스트 코드에서는 음악가 개체를 하나 생성하여 각 메서드를 사용하는 것을 보여 드리려고 합니다.

 

Pianist.h - 파생 클래스 헤더

#pragma once

#include "Musician.h"

class Pianist : public Musician

{

public:

    void Tuning();

};

 

 

 

Pianist.cpp

#include "Pianist.h"

void Pianist::Tuning()

{

    cout<<" 조율하다."<<endl;

}

 

Musician.h - base 클래스 헤더

 

#pragma once

#include <iostream>

using std::cout;

using std::endl;

 

class Musician

{           

public:

    Musician();

    virtual ~Musician(void);

    void Play();

    void Greeting()const;

};

 

Musician.cpp

#include "Musician.h"

Musician::Musician()

{

}

Musician::~Musician(void)

{

}

void Musician::Play()

{

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

}

void Musician::Greeting()const

{

    cout<<" 인사하다."<<endl;

}

 

 이처럼 파생 관계를 표시하는 것만으로 파생 클래스인 Pianist클래스는 기반 클래스인 Musician의 멤버들을 상속받게 됩니다.

 

#include "Pianist.h"

void main()

{

    Pianist *pianist = new Pianist();

    pianist->Play();

    pianist->Greeting();

    pianist->Tuning();

    delete pianist;

}


[그림 5.2]

 

 테스트 코드를 통해 파생된 개체에서는 기반 클래스의 모든 멤버를 상속받음을 확인할 수 있습니다.

 

 주의해야 할 사항으로 기반 클래스에 private으로 접근 지정된 경우에는 파생 클래스 스코프에서 가시성이 없으므로 내부에 존재하지만 보이지 않습니다. 만약, 기반 클래스에 private으로 지정된 멤버 필드의 값을 얻어오거나 설정하는 것을 파생된 스코프에서 가능하게 하고자 한다면 어떻게 해야 할까요

 

 기반 클래스에서는 파생 클래스에서 값을 얻어오거나 설정할 수 있는 메서드를 만들고 해당 메서드의 접근 지정을 protected로 설정하면 됩니다.


5장 

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

반응형