(18020)
Printer 와 Logger 클래스를 다중상속 받은 PrintLogger를 만들어서 App 객체로 하여금 사용하여 로그를 남길 수 있게 한다.
(Hint) PrintLogger의 유일한 인터페이스는 void log(char *)이며 결과는 화면에 스트링이 출력되는 것이다.
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
using namespace std;
// Logger클래스는 abstract class로서 인터페이스를 상속받기 위한 것이다.
class Logger{
public:
virtual void log(string)=0;
};
// Printer 클래스는 이미 만들어져 있는 것.
// 실제 implementation이 있는 함수인 print를 사용하기 위하여 상속받는다.
class Printer{
public:
void print(string msg){
// 진짜 프린터는 없으므로 이 출력이 프린터 출력이라고 생각하자.
cout << "프린터에 출력합니다. " << msg << endl;
}
};
class PrintLogger :public Logger, public Printer{ // 1. 다중 상속을 받는다.
public:
// log method를 구현한다.
// log method 는 단순히 받은 string을 출력하면 된다.
void log(string s){
// 상속받은 함수를 이용하여 s 를 출력한다.
//cout<<s<<endl;
print(s);
}
};
// App 은 Logger를 이용하는 응용 클래스이다.
class App{
private:
Logger *mylogger;
public:
App(Logger *pl){ mylogger = pl ; } // 초기화.
void start(){
for (int i=0; i<5; i++){
mylogger->log( "홍길동: 시스템 이상 무.");
}
}
};
int main(){
App *r1;
r1 = new App(new PrintLogger);
r1->start();
}
'C++ > Adapter pattern' 카테고리의 다른 글
Print logger Object Adapter (0) | 2021.01.24 |
---|---|
다중상속 기초 (0) | 2021.01.24 |