컴공 일기 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
https://m.comic.naver.com/webtoon/detail?titleI...
-
https://m.comic.naver.com/webtoon/detail?titleI...
-
FEED 100할까요 리트 300제였나..? 그거 할까요? 그릿이 문학 N제였나
-
화내지않기 4
-
망시즌임?
-
https://www.s3-class.orbi.kr/00066047138/%EC%97...
-
약대 1학년 1학기 마치고 반수했는데 돌아가게 되면 2학년1학기로 갈 수있나요...
-
오루비 대표 아싸임;;
-
물어볼 데가 없어서 여기다 물어볼게용 어제 레이저시술하고 운동하려는데 하면 안될까여ㅔ
-
안녕하세요? 4
안녕하세요 뉴비예요
-
애오오옹 1
슈뢰딩거 고양이 두마리가 싸우는중 애오오옹 거리는거 귀여움
-
자리에 앉자마자 나를 반겨주는 프사남쟝 과...노짱? 음식 대충 만들어줄것 같았는데...
-
공부 이렇게 하는거 맞음? 지방이라 물어볼데가 없네(07) 0
수학ㅡ시발점+쎈B > 뉴런+수분감 > 드릴, 실모 국어ㅡ간쓸개, 매3비 영어ㅡ듣기,...
-
운석열 레전드 0
윤석열 더 레전드
-
한 28살정도 되나요?
-
성적이 안올라요
-
시험... 1
-
수의대 정시를 준비해보고 싶은데 군수 포함 몇년 정도가 정베 인지 여쭤봐도 되겠슴까...
-
좋은아침 14
남캐한테 치마를 입히고싶은 오전이구나...
-
20렙 안넘은 동테니까 나는 옯뉴비라고 주장했는데... 벌써 19렙이 되었어 그래도...
-
중고나라 사기꾼 1
최x우 정체를 아시는 분은 제보바랍니다.
-
3모성적에 0
수학 2등급 영어 1등급만 올리면..! 행복할거같다
-
나이쓰 나도 패잘알이 되고싶다
-
문디컬 탐구 변표 본다하면 사탐 뭐 선택 하는 게 좋을까요?
-
교재 사려는 데 필기노트<< 이거 꼭 사야함??
-
DM으로 여사친한테 연애경험 물어봤는데 진지한 연애는 한번 해봤다고 해서 그냥연애는...
-
심심해서 학사일정 보는데 내눈이 뭔가 잘못됐나 싶었음
-
원본 블라 됐나보네
-
“남사스럽다”…남친과 벚꽃여행 사진 올린 교사에 항의한 학부모 7
학부모가 자녀의 교육을 명분으로 교사의 평범한 사생활을 간섭해도 되는 것일까....
-
이놈의항마력이너무큰문제다,,
-
어우 근육통 2
등 근육통 미쳤다
-
그동안 여캐들 여러명 보면서 예쁜 애들 정리해줌 1. 미사카 미코토 2. 루이즈...
-
수능특강 마개조 2
헤으응
-
기간이 정해져 있는걸 이제 알았네 아
-
기출픽이랑 챗gpt에는 자유권과 평등권은 법률로 규정되지 않는다고 나와있는데...
-
유입이 있으니 홍보하는거겠지??
-
윤석열 정부 아래에 있는 대한민국에게 미래는 없다. 0
이렇게 쓰면 밴 먹겠죠? 사실 한국의 잠재력을 크게 보는 사람이고 국민성이고...
-
3000부 판매신화 기록 지구과학 핵심모음집을 소개합니다. (현재 오르비전자책...
-
가 대부분에게는 덕담이라는 말 오르비에서 본 적 있는 거 같은데 진짜 맞말인듯.
-
보정전이랑 보정 후 해서 어느정도일까요 4덮 국어 어려웠나요
-
2등급 목표로 수학 하고 있는데 확통이 적절할까요 미적이 적절할까요?
-
사실 공부도 대학공부까지 따지면 결국에 재능러들 이길 수가 없음. 근데 결국에...
-
첫번째는 말하기 부끄러운 대학이었고 세번째는 늙고 병들고 나이 들어서 생각이 없고...
-
수시vs정시 3
백분위 국어 95 수학 97 영어 2 물리 98 생명 97 수시 2.3인데 수시...
-
로피탈 아크사인 그래디언트 헤세 라그랑주 Let's go 0
푸는 모든 문제마다 계산실수라니 그아아아악
-
슈카월드하나틀어놓고 간장계란밥한그릇 퍼먹으면 이게 천국
-
신기한 분을 봄 4
자기가 글써놓고 그 글에 댓글도 거의 다 자기만 다는 분을 봤음
-
지금 정상모 엔써 풀고 있는데 하루에 5문제씩 3과목푸는디 너무 적은가? 저렇게...
이...이게뭐노...
오늘 컴공일기도 잘 봤습니다 ㅎㅎ
저 혹시 어제 댓 봐주실 수 있나요..?
댓글을 사실 어제 봤었는데 갑자기 밤에 책도 읽고 계획도 정리하고 멀티태스킹이 되느라 까먹었네용... 미안해용 ㅠㅠㅠㅠ
이 예제 같은 경우는 아무래도 전반적으로 C++ 기초 문법을 알아야 해용 .... ㅎㅎ 원리 정도만 가볍게 그렇구나만 아셔도 될 거예요..~
역시 기본이 있어야하는 부분이군요!
그래도 컴공은 어떤 것을 배우는지 알 수 있는
기회가 없어서 잘 몰랐는데 컴공주님 덕에 어떤
것을 배우는지 알게 되어서 영광이에요 ㅎㅎ
그리고 저는 답글 봐주시는 것만으로도 감사합니다..!