컴공 일기 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를 선물하세요.
-
미친 개무서워 0 0
ㄷㄷ
-
오늘 머입고 나가지 3 2
고민중임
-
노베반수 국어 공부법 질문 0 0
수학은 갈피 잡아서 공부하고있는데 국어랑 영어를 어떻게 공부할까 고민중입니다 현역...
-
그렇다네요!
-
다들 신사가 돼라! 0 1
신사는 납부한 세금과 헤어진 여자에 대한 이야기는 하지 않는다 설령 그 여자가 자기...
-
ㅎㅇㅇ 8 1
-
쿠앤크 분석 10 2
현재 오르비(Orbi) 커뮤니티 내 10대(알파세대~Z세대 후반) 유저층의 핵심...
-
이쁘당 ㅎㅎ 2 1
-
근데 오늘 왤케 추워 ㄷㄷ
-
쉬었음 청년 2 2
공부했음 청년으로 변신
-
저처럼 수능 보려고 알바하면서 공부하는 사람 있긴 하겠죠? 저건 롯데 호텔이고...
-
언매 누구 듣지;; 추천좀 0 0
언매 아예 첨 하는거라 무슨 강사가 좋은지 구분을 못하겄음;; 2~3등급임 이유도...
-
트럼프:일본 내 말 안들으니 반미국가한테 진거다 0 0
라고 왠지 할거같음
-
ㄱㅅㄲ 9 0
구서끼
-
ㄹㅇ
-
이게 뮤임 17 2
-
자연이가 잘자면 2 0
잘자연~
-
이건 뭐임? 1 0
네, 오르비(Orbi) 커뮤니티에서 활동했던 유명 유저 '쿠키앤크림!'(또는 줄여서...
-
꼬숩노 끼숩노 뀨숩노 까숩노 꺼숩노 꾜숩노 깨숩노 껴숩노 꺄숩노 꾸숩노 꾸숩노...
-
일단 너재밍 찾았음 17 2
오르비(Orbi) 커뮤니티에서 활동하는 유저 **'너재밍' (회원번호:...
-
Ai studio로 해야 나옴
-
회원에 의해 삭제된 글입니다. 6 1
회원에 의해 삭제된 글입니다.
-
일본이 형제국가긴 하네요 0 0
의리는 역시 이거이거 bb
-
사회에 늦게나가는것 0 0
그런건 중요하지 않아 수능은 심장이 시키는건데
-
훈스야매타임 0 0
오늘도 미친 풀이를 보여주심
-
히죽히죽 7 0
-
반수와 점점 가까워지는 중 이제 남은 건 중동 뿐....
-
제미나이 왈 5 2
수험생 커뮤니티인 **오르비(Orbi)**에서 활동하는 특정 유저에 대한 정보는...
-
ㅋㅋ
-
안되는거 걍 생각하고있었는데 (경력 5년~10년이상 사람들이 존나많음;) 메일주소...
-
ㄷㄷ
-
..? 2 1
아니자작문제는딱하나올렸고 학습가이드칼럼은쓴적이없고...
-
불시 점검 나왔어 1 2
어 다들 잘하고 있지?
-
와 충격 4 2
설맞이가 풀면 서울대 간다고 서울대맞이인거 알았음????
-
듣고싶은수학강사 2 1
이동준 이유 잘생김 내스타일임 차함수 그래프분리 거리곱 약간 내 허수감성을 자극함...
-
아무 생각없이 그냥 수시로 올렸었던 난 머가 되는디...
-
망갤테스트 2 0
-
글을 지우고다니면 안돼는 이유 9 0
제미나이가 모름
-
찐따 평가는 0 0
Google ai studio 가서 Gemini 3 flash한테 써달라고 하면...
-
뭘 보낸 거야…
-
그거해보고싶음 0 0
뭐였지
-
의대에 간 케이스도 있더라..
-
박종민 qed 0 0
Qed 왤케 어렵나요?? 악깡버하며 복습하면 실력 늘기는 하나요?? Qed n 도...
-
쉽지않네 2 0
진짜
-
[생1 기출/N제 저자] 수능 생명과학1 과외 모집 0 0
* 자세한 문의는 아래의 링크를 통해 연락 바랍니다....
-
한남 단톡특 4 0
지 할 말만 함..
-
메타전환 4 0
5만덕코 주면 뽀뽀해줌
-
ㅠㅠㅠㅠㅠㅠㅠㅠㅠ 0 0
케이온 20화 개슬프네
-
고3현역인데요 5 1
3모성적이수능성적인가요?
-
어디로 데려가는거에요

이...이게뭐노...

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