컴공 일기 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
-
왜안죽는데
-
파이널 n제로 마무리 하려하는데 드릴6 허들링 뭐가 더 나을까요?? (확통이라...
-
결국 가장 큰 문제는 상반기에 강의 존나 듣고 하반기에 가면 걍 결국 개좆대로 문제...
-
기치자나간당 3
부지런행
-
있으면 도와주세요
-
콘서타 먹고 공부 시작해야지...
-
심심함 추천받아요
-
50일 남았다. 진짜 개같이 달려야 한다. 오늘도 부업 때문에 시간을 좀 뺏겼는데...
-
수학 5
너무어려움
-
밤새도 안졸리다니
-
때로는 크게 싸우기도 하고 때로는 속을 썩이기도 했지만 지금 뒤돌아서 생각을...
-
20년 전에는 대다수 언론과 지식인이 입을 모아 인터넷을 예찬했다. 팬덤 정치 역시...
-
유튜브채널 하나 편집자 근무 시작 (구독자 많진 않음, 업로드 잦음) 2학기...
-
잘자 3
오늘은 일찍 자볼게요
-
아 진짜 좆됨..
-
잘자 2
바보들ㅋㅋ
-
JANE DOE 5
신원이 밝혀지지 않은 여성이라는 뜻 아... 레제씨....
-
배고프구만
-
물리공부하기 3
안씻기
-
사평우옮았나 5
뻘글 실력 왤케 늘었지
-
어느 쪽이 좋으신가요 저는 전자 실패하고 후자 성공함뇨…
-
하품했음
-
여러분왜안자요 5
안자는사람이애초에업ㄱ나..
-
사람이없네 7
-
야밤의 퀴즈 8
숫자 2는 4×9 + 4×3 이고, 9×6 + 10000×3 은 아프다. 6×3 +...
-
영듣=>하고 있음 ok 그리고 끝이라는게 없음 영어=> 끝이라는게 없음. 기본독해...
-
너는 게이가 병이라고 생각하느냐? 게이는 병이 아니다. 너는 이성애자이길 바라느냐?...
-
다음 생엔 울엄마의 아빠로 태어나고 싶당 그냥 갑자기 든 생각임
-
목표: 사문기출끝 6시간~8시간 오늘: 사문 6시간 반 반성: 그냥 빨리 자고...
-
으 1
악
-
컴 랜덤배사인데 3
겁나 커여웡
-
굿밤 게이들 9
게이아니라고? 아니? 당신들은 게이야 왜 일반화냐고? 오르비엔 게이밖에 없어 반박은 받지않음
-
9모 확통80(공통3,확통2개틀)입니다 공통 기출은 수분감3회독, 뉴런 평가원...
-
왜 안주무심 0
왜?
-
분명 5수를 하는 한이 있더라도 서울대에 가야 한다고 하셨습니다... 얼마나 걸릴진...
-
아무도 없군. 7
이제부터
-
배고프다 0
-
인생
-
상대가 외향적이면 내향적으로 바뀌고 상대가 내향적이면 외향적으로 바뀜... 오르비에...
-
진짜 4
내일부터는 패턴 맞춘다
-
반수하면 됨
-
글을 너무 많이 써봐서 몸이 기억하는 느낌
-
혐오vs혐오 나 안되면 다행이긴한데 궁금하네
-
계정 세탁마려움 11
근데 뻘글재능없는 옯찐따라 뉴비되면 아무도 반응안해줄듯...
-
후하후하
-
앙겔라 메르.... 어??
이...이게뭐노...

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