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

[C++] 무효화

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

5.2 무효화

 

 파생을 이용해서 일반화 관계를 형성했을 때 파생 클래스에서 기반 클래스에 정의한 이름과 같은 이름으로 메서드를 만들면 기반 클래스에 정의한 메서드는 무효화가 됩니다.

 

 기반 클래스에 있는 멤버 메서드들 중에 구체적인 구현을 다르게 하고자 한다면 무효화를 이용하면 가능합니다. 만약, 일반 프로그래머가 있고 EH 프로그래머가 있는데 대부분의 행위에 있어 EH 프로그래머는 일반 프로그래머와 같게 일을 한다고 가정을 합시다. 하지만 일반 프로그래머가 프로그래밍을 할 때 "생각하면서 코딩을 한다."와 같이 하는데 EH 프로그래머가 프로그래밍을 할 때는 "생각한 것을 문서화 하고 이를 보면서 코딩을 한다."고 해 볼께요. 이 경우에 일반 프로그래머의 프로그래밍이라는 메서드는 무효화가 됩니다.

 

 무효화의 범위는 메서드 이름을 기준으로 하므로 기반 클래스에 중복 정의된 메서드가 모두 무효화 됩니다.

 

 만약, 일반 프로그래머에 프로그래밍이라는 메서드가 중복되어 있다고 가정을 해 봅시다. 하나는 매개 변수가 없는 메서드, 다른 하나는 매개 변수로 시간을 주는 메소드 형태일 경우 EH 프로그래머에서 프로젝트 명을 입력 인자로 주는 메서드를 만들면 같은 이름을 갖는 일반 프로그래머에 프로그래밍이라는 모든 메서드가 무효화 됩니다.

 

Programmer.h

#pragma once

#include <iostream>

using std::cout;

using std::endl;

 

class Programmer

{

public:

    Programmer(void);

    virtual ~Programmer(void);

    void Programming();

    void Programming(int tcnt);

};

 

  

Programmer.cpp

#include "Programmer.h"

 

Programmer::Programmer(void)

{

}

 

Programmer::~Programmer(void)

{

}

void Programmer::Programming()

{

    cout<<"생각하면서 코딩을 한다."<<endl;

}

void Programmer::Programming(int tcnt)

{

    cout<<tcnt<<"시간 생각하면서 코딩을 한다."<<endl;

}

 

EHProgrammer.h

#pragma once

#include "Programmer.h"

#include <string>

using std::string;

 

class EHProgrammer:

    public Programmer

{

public:

    EHProgrammer(void);

    ~EHProgrammer(void);

    void Programming(string title);

};

 

  

EHProgrammer.cpp

#include "EHProgrammer.h"

EHProgrammer::EHProgrammer(void)

{

}

EHProgrammer::~EHProgrammer(void)

{

}

void EHProgrammer::Programming(string title)

{

    cout<<"프로젝트명:"<<title<<endl;

    cout<<"생각한 것을 문서화하고 이를 보면서 코딩을 한다."<<endl;

}

 

 [그림 5.4]는 무효화 된 메서드를 사용하려고 할 때 나는 오류 코드와 실행 화면입니다.


무효화된 메서드를 사용하려고 할 때 오류 화면

[그림 5.4]

 

[그림 5.5]는 정상적으로 사용하였을 때의 코드와 실행 화면입니다.


[그림 5.5]


5장 

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

반응형