컴공 일기 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를 선물하세요.
-
팝니다
-
이틀전이 오르비 삭제한다고 글올렸을때 누가웹르비 한다했는데 ㄹㅇ이었음... 이제...
-
지금까지 푼 것들/풀 것들 현우진 킬캠 시즌1/시즌2 양승진 시즌1/시즌2 장영진...
-
언매 문학 독서 순으로 푸는지라 22수능땐 멘탈이 괜찮았는데 24때 미친 장지문부터...
-
눈호강하는중
-
큐브 질문.. 5
혹시 큐브 답변하시는분 계신가요? 뉴런에서 이해안되는것질문하는데 계속 질문이...
-
표점이 다 낮은 과목들만 골랐는데 만점받거나 수학에서 하나 틀리면 서울대 자전...
-
좋아요 누르면 오천덕 10
국어 파이널 시기 학습법 칼럼 + 강의 안내글...
-
화작 확통 한지 정법입니다 어디까지 가능할까요..? 9모라 의미없다지만 라인이 궁금합미다..
-
N수용 메가패스 0
뉴스타트 프리미엄 N수 메가패스(교재캐쉬 30만원) <- 이거 올초에 얼마였는지 아시는분??
-
걍 gx를 최고차 1인 이차함수로 두고 우다다다닥 계산해도 ㄱㅊ음?
-
??
-
재업로드 죄송합니다.. 방금 상담하고 왔는데 지금쓰는 1인실 독서실은 월16만원이고...
-
아까 씹덕글 하나 올린거로 테두리 생겨버렸네 ㅋㅋㅋㅋ 씹덕들의 관심 너무 조아
-
윗 문제 해설에선 ”동등한 사람에게 동등한 몫을, 동등하지 않은 사람에겐 동등하지...
-
경희대 응수 언미쌍윤 73 93 2 99 91
-
화작 미적 영어 생1 지1 어디까지 가능할까요? 9모+집모라 의미 없는거...
-
정오사항 확인 가능한가요?
-
방금 상담하고 왔는데 지금쓰는 1인실 독서실은 월16만원이고...
-
발 옆에 그리마가 샤샤샷... 발 들고 겨우 쫓아내서 나왔네요 화장실 구석구석엔...
-
아 힘들다 0
사문실모 하나만 풀면 오공완
-
“기능론은 상징적 상호작용론과 ‘달리’ 사회의 변동보다 안정을 중시한다.” 에서...
-
https://orbi.kr/00025643514/%EB%AA%A8-%EA%B0%95...
-
문제 해설 이외에도 시험 운용 방식 측면에서도 다뤄주시나요??
-
넋을 놓고 하나뿐인 영혼을 뺏기고 그대의 몸짓에 완전히 취해서 숨 쉬는 것조차...
-
해설은 T시기가 현재보다 1/8배 작아서 물질은 8배 된다인데.. E=mc^2에...
-
같은 시험지입니다
-
쪽지할사람 4
ㅈㄱㄴ감쓰 고민상담 잡소리 다 가능
-
106일차
-
몇 번 실험해봤는데 지금까지 다낚임
-
메가 재종 다니는데 투과목은 질답도 못하게해서 개 불편하네 같은 학원비 내면서...
-
걍…결심함 14
안가 여기서 눌러 살거임 앞으로 오르비는 내 집임
-
몇회가 적당?
-
음음 진짜 하루 14시간은 독서실에 있어야 할듯
-
오유란전 국물 있사옵니다 꽃 피는 시절 세개 다 머리 존나 세게 맞은 기분임
-
ㅇㄱㅈㅉㅇㅇ?
-
아 6
수학 잘하고싶다 수학황이되고싶다 씨빨!!
-
쪽지할 사람 11
미자 제외 미자랑 할 얘기가 입시 얘기 밖에 없어서 좀 그럼ㅠ ㅈㅅ
-
초중딩때 겁나 열심히 봤는데 코로나이후로 안보기시작함... 근데 요즘 또 성황인거...
-
닭볶음탕 이라서 ㅋㅋㅋㄱㅋㅋㅋ엌ㅋㅋㄱㅋㅋㅋ
-
딱 작수스러운거 같음....
-
중심별 < 행성인 이유 v = r(오메가) 공식으로 이해해도 맞나요? 각속도 같은데...
-
뭔가 읽어도 읽어도 끝이없다는 느낌도 받고... 한 반 쯤 오면 슬슬 앞에 내용이...
-
요즘 조금 외로운 듯 얼른 수능 치고 연애 하고 싶다 후유...
-
너무해 12
다들 나 놀림 흥! 진짜 떠나서 영영 안돌아올거
-
작년부터 애용 중. 올해 수능 보기 전까지 아껴먹을 예정
-
ㅈㄱㄴ 에휴
-
9번부터 안풀리는데
-
웅플릭스 보고 11
연논기출 하나 풀고 샤인미 미적 풀기
-
완전 쌩노베에요 진짜 암것도 모르는 수준인데 보통 한국사는 언제부터 시작하죠?...
이...이게뭐노...
오늘 컴공일기도 잘 봤습니다 ㅎㅎ
저 혹시 어제 댓 봐주실 수 있나요..?
댓글을 사실 어제 봤었는데 갑자기 밤에 책도 읽고 계획도 정리하고 멀티태스킹이 되느라 까먹었네용... 미안해용 ㅠㅠㅠㅠ
이 예제 같은 경우는 아무래도 전반적으로 C++ 기초 문법을 알아야 해용 .... ㅎㅎ 원리 정도만 가볍게 그렇구나만 아셔도 될 거예요..~
역시 기본이 있어야하는 부분이군요!
그래도 컴공은 어떤 것을 배우는지 알 수 있는
기회가 없어서 잘 몰랐는데 컴공주님 덕에 어떤
것을 배우는지 알게 되어서 영광이에요 ㅎㅎ
그리고 저는 답글 봐주시는 것만으로도 감사합니다..!