컴공 일기 25
게시글 주소: https://dev.orbi.kr/00056748607

#include <iostream>
using namespace std;
#define DEFAULT_FARE 1000
class CPerson{
public:
CPerson() {}
virtual ~CPerson(){
cout << "virtual ~CPerson" << endl;
}
virtual void CalcFare() = 0;
virtual unsigned int GetFare() {return m_nFare;}
protected:
unsigned int m_nFare = 0;
};
class C_GoinWater : public CPerson{
public:
virtual void CalcFare() {
m_nFare = 0; // 무료, 노인 공경
}
};
class C_3su : public CPerson{
public:
virtual void CalcFare() {
m_nFare = DEFAULT_FARE * 50 / 100; // 50%, 중년 공경
}
};
class C_jaesu : public CPerson{
virtual void CalcFare(){
m_nFare = DEFAULT_FARE * 75 / 100; // 75%, 넌 아직 젊어
}
};
class C_hyeonyuk : public CPerson{
public:
virtual void CalcFare() {
m_nFare = DEFAULT_FARE; // 100%
}
};
/////////////////////////////////////////////////////////////////////
/////////////사용자 코드
int main() {
CPerson* arList[4] = {0,};
int N_SU = 0;
// 1.자료 입력
for(auto &person : arList){
cout << "도긩이 : 당신의 N은 몇 입니까?" << endl;
cin >> N_SU;
if(N_SU == 0 or N_SU == 1)
person = new C_hyeonyuk;
else if(N_SU == 2)
person = new C_jaesu;
else if(N_SU == 3)
person = new C_3su;
else if(N_SU > 3)
person = new C_GoinWater;
//생성한 객체에 맞는 요금이 자동 한 줄로 계산 끝.
person -> CalcFare();
}
//2.자료 출력
for(auto person : arList)
cout << person->GetFare()<< "원" << endl;
//3.자료 삭제 및 종료 -> memory leak 막는 건 프로그래머의 기본 덕목
for(auto person : arList)
delete person;
return 0;
}
실행결과 :
도긩이 : 당신의 N은 몇 입니까?
4
도긩이 : 당신의 N은 몇 입니까?
3
도긩이 : 당신의 N은 몇 입니까?
2
도긩이 : 당신의 N은 몇 입니까?
1
0원
500원
750원
1000원
virtual ~CPerson
virtual ~CPerson
virtual ~CPerson
virtual ~CPerson
잔혹하긴 하지만.. 수능을 몇 번 봤느냐에 따라 버스 비용을 계산해주는 프로그램을 만들었습니다.
농담 삼아 만들어 본 예제이긴 하지만, 꽤 중요한 구조이긴 합니다. 일단, 프로그램의 성능을 높이려면 "데이터 분류"는 입력부분에서 모두 이루어지는 게 옳습니다. 왜냐하면, 컴퓨터가 가장 여유로울 때가 입력 시기거든요. 출력 때 분류를 하려고 하면, 연산량이 굉장히 늘어나기 때문에 프로그램이 효율적으로 돌아가진 않습니다. 그래서, 이 코드가 좋은 건 자료 출력부분에서 person->CalcFare(); 딱 한 줄로 선언했다는 것입니다. 이 한 줄로 모든 데이터에 대해서 원하는 출력이 가능하기 때문에 그만큼 효율적인 프로그램이지요. 출력 부분에서 비용 지출을 극한으로 아낀 셈입니다. 원래 성능 업그레이드라는 게, 별 것 없습니다. 안해도 될 걸 안하면 되죠.
허나, 이 효율적인 구조가 가능했던 건, 단 하나의 예약어 때문인데 그것이 바로 CPerson 부분에 있는 virtual 입니다.
virtual을 해줬기 때문에, CPerson을 상속한 현역(hyeonyuk), 재수(jaesu), 삼수(3su), 고인물(GoinWater) 클래스들이 모두 CalcFare 함수를 재정의할 수 있었지요. 즉, CPerson이라는 추상 클래스가 일종의 interface를 주어서 각각의 상속 클래스들에게 자신이 원하는 CalcFare 함수를 조각할 수 있도록 만들어준 것이지요. 이것이 가능했기 때문에 출력 부분에서 비용을 아낄 수 있었던 겁니다.
흔히들, 이런 구조를 Look-up table 혹은 편의상 룩업구조라고도 얘기합니다.
이상 수능 4번 본 4수생 드림..
0 XDK (+0)
유익한 글을 읽었다면 작성자에게 XDK를 선물하세요.
-
수학 모의고사 풀 거 ㅊㅊ 좀 1 1
3모 대비로 수학 풀거 ㅊㅊ좀 2503은 이미 풂
-
고생했더니 치킨마렵노 14 0
이걸먹어말어
-
끝나고 직접 프린트해서 푸는 방법밖에 없는 건가요? 아님 어떻게... 신청해서 보는...
-
배부른데 치킨시킴 13 0
ㅁㅌㅊ?
-
몬스터 신상 먹엇음 14 3
처음에는 아무맛도 안 나는 줄 알앗는데 계속 먹어보니까 맛이 나긴 함 토레타맛 나 흠…
-
이걸해야먹고살수가있는게 고2 고1은 이게 통합과학 시대라
-
언매 고수님들 불쌍한 재수생 한번만 구제해주세요 ㅠㅠㅠㅠ 1 0
요약: 3월부터 잇올에서 공부 시작한 국어 쓰레기같이 못하는 재수생이 지방대...
-
그게 나야 바 둠바 두비두밥~ ^^
-
웃참 하느라 너무 힘듦 작년거보다 올해거가 특히 더 웃김
-
집보내줘 2 0
집
-
근데 4 1
귀납 공부좀 해야할듯 공부하면 늘겠지?? ㅠㅠ 시간 넘 오래걸림
-
그냥 문제를 0 1
잘못 읽었던 거였음...;;
-
등급컷 나올 때 볼걸 0 0
궁금해버림 ㅋㅋㅋㅋ
-
걍 20,22는 시간 자체가 안남았는데 이거 실전개념 다시 들어야 할까요 뉴런 들었어요
-
세상을 정화하는 키리코 출격 0 0
불쌍한중생들을위해경쟁전은하지않는다
-
그것부터 애매하고 윤사도 어려운건지 걍 내가 개못본건지 모르겠네
-
대해린인가 그분 요즘 뭐하시나 3 0
내 최애인데
-
쌍지 벼락치기 5 0
이개다 80퍼정도 들엇는데 걍 이만복만 ㅈㄴ봐도 3모 2-3정도는 확보 가능할까요??
-
스블 카나토미 질문 3 0
고3현역임요 고2모고는 1컷걸리고 고3꺼풀면 14,15,21,22 틀려요 카나토미...
-
밥먹고 바로 누우면 소된다 5 1
음메~~
-
3월 더프 5 0
미적 57분 100점! 15번까지 12분걸리고 22번 좀 어렵고 수열의 극한 개빡
-
반수생 커리 추천해주세요 0 0
서성한 공대 23학번 재학중이고 작년에 무휴학으로 공부하고 수능쳐서 화작 기하 생명...
-
3덮 - 44/47 틀린 문항 - 17 19/18 화2는 아직 진입한지 보름밖에...
-
세계사 수특 1 1
왤케 어려운거 같지 동사 수특보다 더 어려운데
-
뭔가뭔가 10 1
얘는 진짜 슬픈것같음 얘도 슬픈것같긴한데 마음이 아파ㅠㅠ 이런느낌이면 오리비는...
-
나 지금 영어가 ㅈㄴ 무서움 16 0
영어를 거의 1년 넘게 안했는데 개 조지는 거 아님? ㅋㅋㅋㅋㅋ
-
대대장 한명 바뀌었다고 5 1
어떻게 이렇게 삶의 질이 안 좋아지냐..
-
상상 모고 등급컷 0 0
확인 어케함
-
ㅎㅇ 2 0
학교 생활 개재밌어서 잘 안들어오네 ㅃㅇ
-
3월 사설 왜 이리 어려워요… 2 0
21 22 구경도 못해보고 미적 아예 손도 못 댔는데 시간 다지남ㅠ
-
물화생 전부 내신 1등급인데 저 셋 다 수능때 안봄& 지구과학은 내신에서도 안듣고서...
-
'재'입대 2번이니까 총 군대 3번 가는거고 몰론 월급은 다 줌 군대 전역하면...
-
대학 로망 특) 0 1
막상 와보니 별거아님 진짜
-
08들 다 뒷공부하러갔냐 0 1
-
교수님들 발음 뭔가뭔가임 2 2
난 셰익스피어를 xx피어라고 발음 안 하는 교수님을 본 적이 없어
-
수고했어 오늘도 14 1
아무도 너의 슬픔에 관심없대도 난 늘 응원해 수고했어 오늘도
-
어제 내 면역이 무너졌어 0 0
어제부터 구내염나더라 어쩌구 엉엉 내 성적을 가져가도 좋(지 않)아 제발 꺼져줘
-
왜 공부내용은 잘 기억에 안남는데 단 한순간의 감정적 기억은 뇌에 새겨지는가.. 왜...
-
분명 팔로워 150명대였는데 3 1
30명정도가 탈릅했네
-
윤사 개망했는데 윤사 보신분 6 0
35점 인데 ㅋㅋㅋㅋ 어려웠나?
-
수능판은 빨리 떠나는게 답임 0 4
단점은 이러니까 과외를하기가 이게 싹다까먹음 아 과외구해야하는데
-
서포터즈 해보고싶당 0 0
그런거심
-
아 너무 심심하네 4 0
팔러워 뭐하니
-
대학들어가고여기오니까 뭐 할게없노 11 28
-
조연이라도 되고 싶은 것은 욕심일까요,,
-
실험과목이 시작됬다 1 0
또 눈 안 마주치고 말하는거 연습해야겠다...
-
어어 저격하지 마라 1 0
ㅅㅂ
-
야식추천 1 0
받겠습니다
-
오르비 새로운 성대 빌런 입갤 (다큐)ㅋㅋㅋ 21 26
우리 3C 273이는요 고대를 가고 싶었어요 근데 어림도 없지 성적이 부족해서...
-
아거 나만그런가 5 0
가끔 리트 풀면 보기문제보다 그 앞에 게 더 어려운거가틈

이...이게뭐노...

농담으로 받아주시는 것이에요...
이해하면서 보려했는데 역시..!오늘 컴공일기도 잘 봤습니다 ㅎㅎ
저 혹시 어제 댓 봐주실 수 있나요..?
댓글을 사실 어제 봤었는데 갑자기 밤에 책도 읽고 계획도 정리하고 멀티태스킹이 되느라 까먹었네용... 미안해용 ㅠㅠㅠㅠ
이 예제 같은 경우는 아무래도 전반적으로 C++ 기초 문법을 알아야 해용 .... ㅎㅎ 원리 정도만 가볍게 그렇구나만 아셔도 될 거예요..~
역시 기본이 있어야하는 부분이군요!
그래도 컴공은 어떤 것을 배우는지 알 수 있는
기회가 없어서 잘 몰랐는데 컴공주님 덕에 어떤
것을 배우는지 알게 되어서 영광이에요 ㅎㅎ
그리고 저는 답글 봐주시는 것만으로도 감사합니다..!