컴공 일기 25
게시글 주소: https://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를 선물하세요.
-
뭔가 아까 잠시동안 되게 시끌벅적했던 느낌인데
-
사회성도 진짜 필요없던 때고 다들 각자 할거 하기 바쁜 시기라 남 눈치 안보고...
-
괜찮을까용
-
전공도 사회교육학과로 바꼈는데 진로 : 부자는 뭐임 ㅋㅋ
-
SKT "해지 위약금 면제…8월 전 고객 통신료 50% 할인" 3
[서울=뉴시스]윤현성 기자 = SK텔레콤이 사이버 침해 사고 발생 이후인 4월...
-
아직까진 맛있는지 잘 모르겠다 그냥 라면이 좋다
-
중간 72점에서 40점 ㅋㅋㅋㅋㅋㅋㅋ 준나 어려웠으니까 괜찮아 시바
-
한국 좇같다 욕은 욕대로 하고 뜨고싶다하면서 막상 유학가는 사람들한테 도피라고하는건 뭘까
-
어떻게 생각해? 0
반수생이고 지금은 미적 사탐이야. 과는 공대 가고싶음 수학 높3에서 낮2정도가...
-
수학 킬러 자작 만들었는데 아무도 안풀어줘서 다시 올림 3
고1 범위임
-
갑: 기업의 사회적 책임은 오로지 시장의 규칙을 준수하면서 기업 이익의 극대화를...
-
누군가 탈릅함 0
헉
-
매일 운동가기전에 한스푼씩 먹는중
-
고등학교 내신 시험이 끝났습니다. 밤을 새었기에 오늘은 일찍 잡니다.
-
나는 저능아다.
-
매일 1시간 정도 튜자한다 했을때 얼마나 걸리나요? 4주만에 꿑내려면 몇시간이...
-
ㅋ일본가서살건데????????ㅋ일어 영어잘해서 경쟁력잇음.그냥잘하는게아니라 발음 좋음
-
안녕하세요. 만31 저자입니다. 쪽지로 풀이과정을 좀 보고 싶다는 분이 계셔서 수2...
-
핫식스 0
새로운맛 나온거 아시나요?? 애플망고와 파인애플맛이 나왔는데 저는 개인적으로 애플...
-
지금은 '흙흙'이 언어유희를 이용한 표기로 인식되지만 사실 20세기 초만 해도...
-
더프의 1.5배…….
-
내 철칙이다
-
사실 4
생기부챙기기 너무 귀찮았어요. 보고서,발표,독서토론 밀려있어서요
-
책 끼워팔기 하려는거임? 진짜 뭔가 뭔가임;;
-
운동하고와서 또 해야지
-
문만하는데 정신팔려서 공부를 못하고있음 그래도 완전 노베에서 사탐둘다 고정 1은...
-
오르비 레벨 2
그동안 눈팅만 해왔는데 레벨은 어떻게 올리는걸까요?
-
ebs 연계가 안되는거라면 작년컨텐츠 퀄이 좋을 시 올해 서바 재끼고 작년꺼 풀어도...
-
6모 84입니다 21(레전드실수) 22 28 30 수리논술 준비해본적없는데...
-
진로선택과목 화학2 수행 고려했을 때 지필에서 0.3점차 A 기하 수행 고려했을 때...
-
수1만왓넹
-
이거 12월에 나왔던데 입문 n제 포지션인 거임? 난이도 쉬운거면 건너뛰고 시즌2부터 풀려는데
-
ㅎㅇ 4
뭐해?
-
스나이퍼 후기 0
부끄러운 제 6평 성적입니다.. 언매에서 -2라니 ㅡㅡ 경제는 세지에서 돌린 지...
-
자리가 나서 입학상담 받고 결제하고 집으로 오는중
-
흠..
-
내 바람 2
아무도 상처 입지 않고 행복했으면 좋겠다. 왜 끊임없이 상처 입히도록 세상이 설계된...
-
하루 2시간 이상 공부안한지 한 2년 된거같고요. 국어 영어 어릴때 해놓은거로...
-
경제 하지 말까 7
고능아들밖에 없어서 개불안
-
만족하겠지?... 샘플이고 제작중임 ㅅ
-
국어 실력을 기르려면 ’내가 이 문제를 왜 틀렸는지‘를 제대로 파악해야하는데 등급이...
-
이예ㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔ 복수정답~~~~~
-
교재비 너무 비싸네요 어떤가요???둘중 하나만 들어도 되나요??? 아니면 둘다 듣는게좋은가요???
-
비갤에도 내 이름이 보이고 사람들이 날 덜 알아보게 하고싶은디
-
사랑니 앞으로 3개빼면 대충 4~6kg 더 빠질듯
-
이번 6모는 쉬워서 80후반이지만 전에는 낮은3 나왔었거든요 리앤로 순삽 거의 다...
-
사문런 2일차 2
개념인강듣고 마더텅 사서 평수능만 우선 풀어보고있는데 하루에 대단원 하나씩 빼면...
-
지금까지 최대한 풀고 해설강의 들으면서 생각 못했던 발상같은거 책에 열심히...
-
원래 가끔 장문의 의대글만 쓰는 분 아니었나
이...이게뭐노...

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