#include<iostream>
using namespace std;
class Circle {
int radius;
public:
Circle(int radius = 1) { this->radius = radius; }
int getRadius() { return radius; }
};
template<class T>
T bigger(T a, T b){ // 두 개의 매개 변수를 비교하여 큰 값을 리턴
if (a > b)return a;
else return b;
}
int main()
{
int a = 20, b = 50, c;
c = bigger(a, b);
cout << "20과 50중 큰 값은 " << c << endl;
Circle waffle(10), pizza(50), y;
y = bigger(waffle, pizza);
cout << "waffle과 pizza 중 큰 것은 반지름은 " << y.getRadius() << endl;
}
아래 결과와 같이 출력되도록 프로그램을 수정하라
20과 50중 큰 값은 50 waffle과 pizza 중 큰 것의 반지름은 20
y = bigger(waffle, pizza); 이 부분에서 클래스에 대한 비교가 없기 때문에 오류가 납니다.
소스코드
#include<iostream>
using namespace std;
class Circle {
int radius;
public:
Circle(int radius = 1) { this->radius = radius; }
int getRadius() { return radius; }
};
template<class T>
T bigger(T a, T b){ // 두 개의 매개 변수를 비교하여 큰 값을 리턴
if (a > b)return a;
else return b;
}
Circle bigger(Circle a, Circle b) {
if (a.getRadius() > b.getRadius())return a;
else return b;
}
int main()
{
int a = 20, b = 50, c;
c = bigger(a, b);
cout << "20과 50중 큰 값은 " << c << endl;
Circle waffle(10), pizza(20), y;
y = bigger(waffle, pizza);
cout << "waffle과 pizza 중 큰 것은 반지름은 " << y.getRadius() << endl;
}
배열에서 원소를 검색하는 search() 함수를 템플릿으로 작성하라. search()의 첫번째 매개 변수는 검색하고자 하는 원소 값이고, 두 번째 매개 변수는 배열이며, 세 번째 매개 변수는 배열의 개수이다. search() 함수가 검색에 성공하면 true를, 아니면 false를 리턴한다. search()의 호출 사례는 다음과 같다.
메인함수
int x[] = { 1,10,100,5,4 };
if (search(100, x, 5))cout < , "100이 배열 x에 포함되어 있다."; // 이 cout 실행
else cout << "100이 배열 x에 포함되어 있지 않다";
소스코드
#include<iostream>
using namespace std;
template<class T>
T search(T n,T x[],T size) {
for (int i = 0; i < size; i++)
if (x[i] == n)
return true; //맞는 값이 있으면 true리턴
return false; //아니면 false 리턴
}
int main() {
int x[] = { 1,10,100,5,4 };
if (search(100, x, 5))cout << "100이 배열 x에 포함되어 있다."; // 이 cout 실행
else cout << "100이 배열 x에 포함되어 있지 않다";
}
두 개의 배열을 비교하여 같으면 true를, 아니면 false를 리턴하는 제네릭 함수 equalArray()를 작성하라. 또한 main() 함수를 작성하여 equalArrays()를 호출하는 몇 가지 사례를 보여라. equalArrays()를 호출하는 코드 사례는 다음과 같다.
메인함수
int x[] = { 1,10,100,5,4 };
int y[] = { 1,10,100,5,4 };
if (equalArrays(x, y, 5))cout << "같다";
else cout << "다르다";
소스코드
#include<iostream>
using namespace std;
template <class T>
T equalArrays(T x[], T y[], T n) {
for (T i = 0; i < n; i++)
if (x[i] != y[i])
return false;
return true;
}
int main() {
int x[] = { 1,10,100,5,4 };
int y[] = { 1,10,100,5,4 };
if (equalArrays(x, y, 5))cout << "같다";
else cout << "다르다";
}
#include<iostream>
using namespace std;
template <class T>
T biggest(T x[], T n) {
T big = x[0];
for (int i = 0; i < n; i++)
big = big > x[i] ? big : x[i];
//삼항 조건 연산자 조건 ? true : false
//조건이 맞으면 true 아니면 false
return big;
}
int main()
{
int x[] = { 1,10,100,5,4 };
cout << biggest(x, 5) << endl; //5는 배열 xdml zmrl. 100이 출력된다.
}
모든 프린터는모델명(model),제조사(manufacturer),인쇄 매수(printedCount),인쇄 종이 잔량(availableCount)을 나타내는 정보와print(int pages)멤버 함수를 가지며,print()가 호출할 때마다 pages 매의 용지를 사용한다. 잉크젯 프린터는잉크 잔량(availableInk)정보와printInkJet(int pages) 멤버 함수를 추가적으로 가지며, 레이저 프린터는토너 잔량(availableToner)정보와 역시printLaser(int pages) 멤버 함수를 추가적으로 가진다. 각 클래스에 적절한 접근 지정으로 멤버 변수와 함수, 생성자, 소멸자를 작성하고, 다음과 같이 실행되도록 전체 프로그램을 완성하라. 잉크젯 프린터 객체와 레이저 프린터 객체를 각각 하나만 동적 생성하여 시작한다.
결과
소스코드
#include<iostream>
using namespace std;
#include<iostream>
#include<string>
using namespace std;
class Printer {
string model; //모델
string manufacturer; //제조사
int printedCount; //인쇄 매수
int availableCount; //인쇄 잔량
public:
Printer(string m, string f, int ac) {
model = m;
manufacturer = f;
availableCount = ac;
}
string getmodel() { return model; } //모델명 리턴
string getmanufacturer() { return manufacturer; } //제조사 리턴
int getCount() { return availableCount; } //인쇄 잔량 리턴
virtual void show() = 0;
virtual int getavailable() = 0;
virtual void printitem(int pages) = 0;
virtual int getavailableCount() = 0;
void print(int pages) {
printedCount = pages;
availableCount -= printedCount;
}
};
class IPrinter : public Printer {
int availbleInk; //잉크 잔량
public:
IPrinter(string m, string f, int aCount, int aInk) : Printer(m, f, aCount) { availbleInk = aInk; }
virtual int getavailableCount() { return getCount(); }
virtual void printitem(int pages) {
availbleInk -= pages;
print(pages);
}
virtual int getavailable() { return availbleInk; }
virtual void show() {
cout << getmodel() << ", " << getmanufacturer()
<< ", 남은 종이" << getavailableCount() << ", 남은 잉크" << getavailable() << endl;
}
};
class RPrinter : public Printer {
int availableToner; //토너 잔량
public:
RPrinter(string m, string f, int aCount, int aToner) : Printer(m, f, aCount) { availableToner = aToner; } //토너 초기화
virtual int getavailableCount() { return getCount(); }
virtual void printitem(int pages) {
availableToner -= pages;
print(pages);
}
virtual int getavailable() { return availableToner; }
virtual void show() {
cout << getmodel() << ", " << getmanufacturer()
<< ", 남은 종이" << getavailableCount() << ", 남은 토너" << getavailable() << endl;
}
};
int main()
{
IPrinter IP("Officejet V40", "HP", 5, 10);
RPrinter RP("SCX-6x45", "삼성전자", 3, 20);
char q = 'y';
int printer, pages;
cout << "현재 작동중인 2대의 프린터는 아래와 같다" << endl;
cout << "잉크젯 : ";
IP.show();
cout << "레이저 : ";
RP.show();
while (true) {
cout << endl;
cout << "프린터 (1:잉크젯, 2:레이저)와 매수 입력>>";
cin >> printer >> pages;
if (!(printer == 1 || printer == 2)) //프리터 1번 또는 2번을 선택하지 않았다면
cout << "프린터가 존재하지 않습니다." << endl;
else
{
if (printer == 1) { //잉크젯 선택
if (IP.getavailableCount() < pages) //용지가 부족할 경우
cout << "용지가 부족하여 프린트할 수 없습니다." << endl;
else {
IP.printitem(pages);
cout << "프린터하였습니다.\n";
}
}
else { //그 외 선택
if (RP.getavailableCount() < pages) //용지가 부족할 경우
cout << "용지가 부족하여 프린트할 수 없습니다." << endl;
else {
RP.printitem(pages);
cout << "프린터하였습니다.\n";
}
}
}
IP.show();
RP.show();
cout << "계속 프린트 하시겠습니까?(y/n)>>";
cin >> q; //n이면 루프 종료
if (q == 'y')
continue;
else //그이외에의 값 종료 while(q != 'n')을 쓰셔도 됩니다.
exit(1);
}
}