컴공 일기 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를 선물하세요.
-
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
-
그때 별표친 문제가 2문제였는데 28 30번이었음
-
교육청때 x등급이었는데 평가원은 그거보다 1,2등급 떨어졌어요라는 글을 아주 많이...
-
국영치고 점심 안먹고 수학치는게 ㄹㅇ 수능 현장감 비슷해짐 배가 ㅈㄴ 고파져서 머리 개안돌아감ㅋㅋ
-
이게게임이지ㅋㅋㅋ
-
사람은 아침이라 없었는데 존나 신나는 팝송 크게 틀어놔서 좀 힘들었다.... 어려운...
-
이거 오르비 몇프로정도임?
-
그가 색을 칠한곳은 종이 뿐이 아니었다. 그것을 바라보는 이들의 모든 눈에 그 색이...
-
이게 약간 24확통같은거임 물화작으로 나온것 자체가 ㅈ같은거지 만점권 아닌이상...
-
22 9평 1컷 100이었는데 수능 사이좋게 멸망 23수능 화작 ㅈㄴ 쉬웠다고해도...
-
“의사 하느니 대기업 취직을 하겠다” 현웃 ㅋㅋㅋㅋ 2
우리 요요쿤이 미는 신박한 이론을 한번 보고 갑시다 ㅋㅋㅋㅋ 대기업을 못가서 의대?...
-
말이 안된다
-
업뎃후에도 존나 후하게 주네 ㅋㅋ
-
강제로산책 진짜추워서못있겠네 건강해지겠네젠장..
-
스나이퍼 후기 0
저 [학과 목록] 위에 무슨 대학인지도 나오면 좋을 것 같아요! 로고를 붙인다든지...
-
제목그대로
-
어떻게 티원은 1
msi만 가면 귀신같이 떡락하냐
-
6평 ㅇㅈ 2
화작만백 97.. 1컷 6점차이난다는데 진짠가요
-
일어나보니 스카에 사람이 엄청많아졌군
-
점바점 심하다는데 어떤가요??
-
하.. 0
ㅅㅂ럼들이 지원서를 읽기만하고 답장이 안옴
-
아니씨발 세스코 불러서 서랍장에 오나홀딜도 다숨겼는데 4
그거 열어서 약놓고가네 직원 표정이ㅅㅂ
-
설자전 cc 3
이 성적에서 생윤까지 만점으로 점수 올리면 cc맞고도 설자전이나 설학부 합격할 수 있나요??
-
수특수완 1
6모 9모에서 이미 나온 문학 연계 작품은 공부 안 해도 되나요?
-
주 1회 4시간 or 주 2회 2시간이면 부족할까요? 숙제 푼 거 가져와서 오답 및...
-
통학 한시간이지만 통학할 수 있음에 감사함을
-
불편함 그냥
-
군필삼수라고 생각하니까 마음이 덜 불편함
-
더 잘껄 0
씨앙
-
지는 거에요? 6
T1 바텀 라인전 밀리는 건 또 신기하네
-
학원에 가고 있네 뚠뚠
-
패자조로 가십쇼..
-
햄 질렀다 4
15개월할부ㅇㅇ
-
오늘 점심은 1
짜파구리+차돌박이다 으흐흐
-
1회차 후기 22번에 20분박고 품... 총 43분걸림 해설지도 엄청 잘나와있어서...
-
대 날 굴 매치포인트각 ㄷㄷ
-
이게맞아
-
무려.. 8시간..하하
-
쌍윤 시간분배 0
작수 생윤3 윤사5 인데 제가 국수도 좀 노베라서 사탐 하루에 몇시간 공부하면...
-
지구에서 동사 1
사탐런하는데 이 시기에 동사 괜찮은가요.. 지구보다 개념양 많나요?
-
섹스하고싶노 9
오래된 생각이다. . .
-
쌍윤 강의 0
쌍윤이면 누구강의 듣는게 가장 좋은가요?...
-
ㅋㅋ 제목 그대로입니다 3학년내신 화작1 정법1 한지1 미적5 > 2.0입니다...
-
검정고시 치면 반영이 정확히 어떻게 되는 건가요..? 수능 100%로 갈 수 있나요?
-
오케이 가보자 요즘 하루에 4캔씩은 먹어서 끊어야 할듯
-
얼버기 2
수능날 후련히 교문을 나오기 목표 1일차
-
드릅게 비싸군요
-
반수생이고.. 작수 언매 백분 95였을정도로 평소 국어는 괜찮게 1-2등급 왔다갔다...
-
5일 내내 11시 등원 실화냐;
이...이게뭐노...

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