문제 :

다음 그림과 같은 상속 구조를 갖는 클래스를 설계한다.

모든 프린터는 모델명(model), 제조사(manufacturer), 인쇄 매수(printedCount), 인쇄 종이 잔량(availableCount)을 나타내는 정보와 print(int pages) 멤버 함수를 가지며, print()가 호출할 때마다 pages 매의 용지를 사용한다.

잉크젯 프린터는 잉크 잔량(availableInk) 정보와 printInkJet(int pages) 멤버 함수를 추가적으로 가지며, 레이저 프린터는 토너 잔량(availableToner) 정보와 역시 printLaser(int pages) 멤버 함수를 추가적으로 가진다.

각 클래스에 적절한 접근 지정으로 멤버 변수와 함수, 생성자, 소멸자를 작성하고, 다음과 같이 실행되도록 전체 프로그램을 완성하라.

잉크젯 프린터 객체와 레이저 프린터 객체를 각각 하나만 동적 생성하여 시작한다.

실행 결과 :

목적 및 힌트 :

상속 구조로 종합 응용 연습

코드 :

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 #include using namespace std; class PrintMachine { string model, manuf; int pcount, avlcount; protected: PrintMachine(string model, string manuf, int avlcount){ this->model=model; this->manuf=manuf; this->avlcount=avlcount; } bool print(int pages){ if(avlcount < pages){ cout « “용지가 부족하여 프린트 할 수 없습니다.\n”; return false; } for(int i=0; i< pages; i++){ avlcount–; } return true; } string get_model(){ return model; } string get_manuf(){ return manuf; } int get_avlcount(){ return avlcount; } }; class PrintInkJet : public PrintMachine { int avlink; public: PrintInkJet(string model, string manuf, int avlcount, int avlink) : PrintMachine(model, manuf, avlcount){ this->avlink = avlink; } bool printInkJet(int pages){ if(print(pages)); else return false; if(avlink < pages){ cout « “잉크가 부족하여 프린트 할 수 없습니다.\n”; return false; } for(int i=0; i<pages; i++){ avlink–; } return true; } void show(){ cout « get_model() « “\t,” « get_manuf() « “\t,남은 종이 " « get_avlcount() « “장\t,남은 잉크 " « avlink « endl; } }; class PrintLaser : public PrintMachine { int avltoner; public: PrintLaser(string model, string manuf, int avlcount, int avltoner) : PrintMachine(model, manuf, avlcount){ this->avltoner = avltoner; } bool printLaser(int pages){ if(print(pages)); else return false; if(avltoner < pages){ cout « “토너가 부족하여 프린트 할 수 없습니다.\n”; return false; } for(int i=0; i<pages; i++) avltoner–; return true; } void show(){ cout « get_model() « " ,” « get_manuf() « “\t,남은 종이 " « get_avlcount() « “장\t,남은토너 " « avltoner « endl; } }; int main() { int pnum, pages; char yon; PrintInkJet* inkjet = new PrintInkJet(“Officejet V40”, “Hp”, 5, 10); PrintLaser* laser = new PrintLaser(“SCX-6x45”, “삼성전자”, 3, 20); cout « “현재 작동중인 2 대의 프린터는 아래와 같다\n”; cout « “잉크젯 : “; inkjet->show(); cout « “레이저 : “; laser->show(); cout « endl; while(true){ cout « “프린터(1:잉크젯, 2:레이저)와 매수 입력»”; cin » pnum » pages; if(pnum==1) if(inkjet->printInkJet(pages)) cout « “프린트 하였습니다.\n”; if(pnum==2) if(laser->printLaser(pages)) cout « “프린트 하였습니다.\n”; if(pnum != 1 && pnum != 2) cout « “프린터를 잘못 선택하셨습니다.\n”; /* 또는 switch(pnum){ case 1: if(inkjet->printInkJet(pages)) cout « “프린트 하였습니다.\n”; break; case 2: if(laser->printLaser(pages)) cout « “프린트 하였습니다.\n”; break; default : cout « “프린터를 잘못 선택하셨습니다.\n”; break; } switch문 사용 가능 */ inkjet->show(); laser->show(); while(true){ cout « “계속 프린트 하시겠습니까(y/n)»”; cin » yon; cout « endl; if(yon==‘n’) return 0; else if(yon==‘y’) break; else cout « “잘못 입력하셨습니다.\n”; } } delete inkjet; delete laser; }

공유하기

게시글 관리

코딩은 내일부터 ;

저작자표시 (새창열림)

💻 개발 & CS > C++ 프로그래밍’ 카테고리의 다른 글

명품 C++ programming 실습 문제 10장 1번  (1) 2020.03.09
명품 C++ programming 실습 문제 8장 9번  (4) 2020.03.09
명품 C++ programming 실습 문제 8장 7번  (1) 2020.03.09
명품 C++ programming 실습 문제 8장 6번  (1) 2020.03.09
명품 C++ programming 실습 문제 8장 5번  (1) 2020.03.09