1. 문제

 

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

 

모든 프린터는 모델명(model), 제조사(manufacturer), 인쇄 매수(printedCount), 인쇄 종이 잔량(availableCount)을 나타내는 정보를 가진다. print(int pages) 함수와 show() 함수는 가상 함수로 구현하라. print(int pages)는 pages 만큼 프린트 하는 함수이고, show() 함수는 현재 프린트의 모델, 제조사, 인쇄 매수, 인쇄 종이 잔량 등을 출력하는 함수이다.

 

잉크젯 프린터는 잉크 잔량(availableInk) 정보를 추가적으로 가지며, 레이저 프린터는 토너 잔량(availableToner) 정보를 추가적으로 가진다. 이들의 print(int pages) 멤버 함수는 프린터 타입에 맞게 구현하라. 각 클래스를 설계 구현하고 다음과 같이 실행되도록 전체 프로그램을 완성하라. InkJetPrinter 객체와 LaserPrinter 객체를 각각 하나만 동적으로 생성하여 시작한다.

 

 

2. 결과

 

 

 

3. 코드

#include <iostream>
#include <string>
using namespace std;

class printer {
protected:
	string model;
	string manufacturer;
	int printedCount;
	int availableCount;
public:
	printer(string m, string ma, int avail) { model = m; manufacturer = ma; availableCount = avail; }
	virtual void print(int pages) = 0;
	virtual void show() = 0;
	int getAvail() { return availableCount; }
};
class InkJetPrinter : public printer {
	int availableInk;
public:
	InkJetPrinter(string m, string ma, int avail, int availInk) : printer(m, ma, avail) {
		availableInk = availInk;
	}
	void print(int pages) {
		printedCount = pages;
		availableCount -= printedCount;
		availableInk -= printedCount;
	}
	void show() {
		cout << model << " ," << manufacturer << " ,남은 종이 " << availableCount << "장 ,남은 잉크 " << availableInk << endl;
	}
};
class LaserPrinter : public printer {
	int availableToner;
public:
	LaserPrinter(string m, string ma, int avail, int availToner) : printer(m, ma, avail) {
		availableToner = availToner;
	}
	void print(int pages) {
		printedCount = pages;
		availableCount -= printedCount;
		availableToner -= printedCount;
	}
	void show() {
		cout << model << " ," << manufacturer << " ,남은 종이 " << availableCount << "장 ,남은토너 " << availableToner << endl;
	}
};

int main() {
	InkJetPrinter* Ink = new InkJetPrinter("Officejet V40", "HP", 5, 10);
	LaserPrinter* Laser = new LaserPrinter("SCX-6x45", "삼성전자", 3, 20);
	int a, b;
	string exit;

	cout << "현재 작동중인 2 대의 프린터는 아래와 같다" << endl;
	cout << "잉크젯 : "; Ink->show();
	cout << "레이저 : "; Laser->show();

	while (1) {
		cout << endl << "프린터(1:잉크젯, 2:레이저)와 매수 입력>>";
		cin >> a >> b;
		if (a == 1) {
			if (b > Ink->getAvail()) {
				cout << "용지가 부족하여 프린트할 수 없습니다." << endl;
				Ink->show();
				Laser->show();
			}
			else {
				cout << "프린트하였습니다." << endl;
				Ink->print(b);
				Ink->show();
				Laser->show();
			}
		}
		else if (a == 2) {
			if (b > Laser->getAvail()) {
				cout << "용지가 부족하여 프린트할 수 없습니다." << endl;
				Ink->show();
				Laser->show();
			}
			else {
				cout << "프린트하였습니다." << endl;
				Laser->print(b);
				Ink->show();
				Laser->show();
			}
		}
		cout << "계속 프린트 하시겠습니까(y/n)>>";
		cin >> exit;
		if (exit == "n") break;
	}
}

 

4. 설명

 

print, show 함수를 가상 함수로 선언한 후 자식 클래스에서 각각 알맞게 구현하였습니다.

 

main에서는 각 객체를 하나 씩 동적으로 생성하였습니다.

 

 

※ 예시 그림에는 남은 토너 수가 19개가 되어있는데 저는 장당 1개씩 빼서 18개가 되었습니다. 

 

 

+ Recent posts