명품 C++ programming 실습 문제 10장 7번

문제 : 다음 프로그램은 컴파일 오류가 발생한다. 소스의 어디에서 왜 컴파일 오류가 발생하는가? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #include 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(20), y; y = bigger(waffle, pizza); cout « “waffle과 pizza 중 큰 것의 반지름은 " « y.getRadius() « endl; } 실행 결과 : ...

2020년 3월 9일 · 2 분 · Sobamemil

명품 C++ programming 실습 문제 10장 6번

문제 : 다음 함수는 매개 변수로 주어진 int 배열 src에서 배열 minus에 들어있는 같은 정수를 모두 삭제한 새로운 int 배열을 동적으로 할당받아 리턴한다. retSize는 remove() 함수의 실행 결과를 리턴하는 배열의 크기를 전달받는다. 1 int * remove(int src[], int sizeSrc, int minus[], int sizeMinus, int& resSize); 템플릿을 이용하여 remove를 일반화하라. 실행 결과 : 목적 및 힌트 : 함수의 일반화에 대한 이해, 템플릿 함수 만들기 코드 : 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 #include using namespace std; template <class T> T* remove(T src[], int sizeSrc, T minus[], int sizeMinus, int & retsize){ int j; T* tmpArray = new T[sizeSrc]; for(int i=0; i<sizeSrc; i++){ for(j=0; j<sizeMinus; j++){ if(src[i] == minus[j]){ // src의 원소와 minus의 원소가 같으면 j의 값을 하나 내린 후 break –j; break; } } if(j==sizeMinus){ // j==sizeMinus 라는건 src와 minus에 같은 원소가 없어 중간에 break 되지 않은 경우 tmpArray[retsize] = src[i]; // src[i]를 동적 할당 하여 생성한 tmpArray에 삽입 retsize++; // return 할 size의 값을 하나 올려줌 } } return tmpArray; } int main() { int a[] = { 1,2,3,4,5,6,7,8,9,10 }; int b[] = { 5,6,7,8,9 }; int size=0; int *p = remove(a, 10, b,5, size); for (int i = 0; i < size; ++i) cout « p[i] « ’ ‘; cout « endl; delete[] p; size = 0; char c[] = { ‘a’,‘b’,‘i’,’m’,‘c’,’d’,’e’,}; char d[] = { ‘k’,‘i’,’m’,’n’,‘u’ }; char *q = remove(c, 7, d, 5,size); for (int i = 0; i < size; ++i) cout « q[i] « ’ ‘; cout « endl; delete[] q; } 설명 : ...

2020년 3월 9일 · 2 분 · Sobamemil

명품 C++ programming 실습 문제 10장 5번

문제 : 다음 함수는 매개 변수로 주어진 두 개의 int 배열을 연결한 새로운 int 배열을 동적 할당받아 리턴한다. 1 int * concat(int a[], int sizea, int b[], int sizeb); concat가 int 배열뿐 아니라 다른 타입의 배열도 처리할 수 있도록 일반화하라. 실행 결과 : 목적 및 힌트 : 함수의 힐반화에 대한 이해, 템플릿 함수 만들기 코드 : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #include using namespace std; template <class T> T* concat(T a[], int sizea, T b[], int sizeb){ T *rArray = new T[sizea + sizeb]; // return 할 배열을 동적생성 for(int i=0; i<sizea+sizeb; i++){ if(i<sizea) rArray[i] = a[i]; else rArray[i] = b[i-sizea]; } return rArray; } int main() { int x[] = { 1, 10, 100, 5, 4 }; int y[] = { 7, 6, 10, 9 }; int *a = concat(x, 5, y, 4); int aSize = sizeof(x)/sizeof(x[0]) + sizeof(y)/sizeof(y[0]); // a에 들어있는 원소의 개수 for (int i = 0; i<aSize; i++) cout « a[i] « ’ ‘; } 공유하기 ...

2020년 3월 9일 · 2 분 · Sobamemil

명품 C++ programming 실습 문제 10장 4번

문제 : 배열에서 원소를 검색하는 search() 함수를 템플릿으로 작성하라. search()의 첫 번째 매개 변수는 검색하고자 하는 원소 값이고, 두 번째 매개 변수는 배열이며, 세 번째 매개 변수는 배열의 개수이다. search() 함수가 검색에 성공하면 true를, 아니면 false를 리턴한다. search()의 호출 사례는 다음과 같다. 1 2 3 int x[] = {1, 10, 100, 5, 4}; if(search(100, x, 5)) cout « “100이 배열 x에 포함되어 있다”; // 이 cout 실행 else cout « “100이 배열 x에 포함되어 있지 않다”; 실행 결과 : ...

2020년 3월 9일 · 2 분 · Sobamemil

명품 C++ programming 실습 문제 10장 3번

문제 : 배열의 원소를 반대 순서로 뒤집는 reverseArray() 함수를 템플릿으로 작성하라. reverseArray()의 첫 번째 매개 변수는 배열에 대한 포인터이며 두 번째 매개 변수는 배열의 개수이다. reverseArray()의 호출 사례는 다음과 같다. 1 2 3 4 int x[] = { 1, 10, 100, 5, 4}; reverseArray(x, 5); for(int i=0; i<5; i++) cout « x[i] « ’ ‘; // 4 5 100 10 1이 출력된다. 실행 결과 : 목적 및 힌트 : ...

2020년 3월 9일 · 2 분 · Sobamemil

명품 C++ programming 실습 문제 10장 2번

문제 : 두 개의 배열을 비교하여 같으면 true를, 아니면 false를 리턴하는 제네릭 함수 equalArrays()를 작성하라. 또한 main() 함수를 작성하여 equalArrays()를 호출하는 몇 가지 사례를 보여라. equalArrays()를 호출하는 코드 사례는 다음과 같다. 1 2 3 4 5 6 int x[] = {1, 10, 100, 5, 4}; int y[] = {1, 10, 100, 5, 4}; if(equalArray(x, y, 5)) cout « “같다”; // 배열 x, y가 같으므로 “같다” 출력 else cout « “다르다”; 실행 결과 : ...

2020년 3월 9일 · 2 분 · Sobamemil

명품 C++ programming 실습 문제 10장 1번

문제 : 배열을 받아 가장 큰 값을 리턴하는 제네릭 함수 biggest()를 작성하라. 또한 main() 함수를 작성하여 biggest()를 호출하는 몇 가지 사례를 보여라. 실행 결과 : 목적 및 힌트 : 템플릿 함수 만들기 biggest()를 호출하는 코드 사례는 다음과 같다. 1 2 int x[] = {1, 10, 100, 5, 4}; cout « biggest(x, 5) « endl; // 5는 배열 x의 크기. 100이 출력된다. 코드 : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #include using namespace std; template <class T> T biggest(T a[], T n){ T big = a[0]; // 배열 a의 첫번째 원소를 big에 삽입 for(T i=1; i<n; i++) big = big < a[i] ? a[i] : big; // big보다 a[i]의 값이 더 크면 big에 a[i]의 값을 삽입 return big; } int main() { int big = 0; int x[] = {1, 10, 100, 5, 4}; cout « biggest(x, 5) « endl; } 설명 : ...

2020년 3월 9일 · 2 분 · Sobamemil

명품 C++ programming 실습 문제 8장 9번

문제 : 비행기 예약 프로그램을 작성하라. 이 문제는 여러 개의 클래스와 객체들을 다루는 연습을 위한 것이다. 클래스 사이의 상속 관계는 없다. 항공사 이름은 ‘한성항공’이고, 8개의 좌석을 가진 3대의 비행기로 서울 부산 간 운항 사업을 한다. 각 비행기는 하루에 한 번만 운항하며 비행시간은 07시, 12시, 17시이다. 비행기 예약 프로그램은 다음의 기능을 가진다. ● 예약 : 비행 시간, 사용자의 이름, 좌석 번호를 입력받아 예약한다. ● 취소 : 비행 시간, 사용자의 이름, 좌석 번호를 입력받고 예약을 취소한다. ...

2020년 3월 9일 · 4 분 · Sobamemil

명품 C++ programming 실습 문제 8장 8번

문제 : 다음 그림과 같은 상속 구조를 갖는 클래스를 설계한다. 모든 프린터는 모델명(model), 제조사(manufacturer), 인쇄 매수(printedCount), 인쇄 종이 잔량(availableCount)을 나타내는 정보와 print(int pages) 멤버 함수를 가지며, print()가 호출할 때마다 pages 매의 용지를 사용한다. 잉크젯 프린터는 잉크 잔량(availableInk) 정보와 printInkJet(int pages) 멤버 함수를 추가적으로 가지며, 레이저 프린터는 토너 잔량(availableToner) 정보와 역시 printLaser(int pages) 멤버 함수를 추가적으로 가진다. 각 클래스에 적절한 접근 지정으로 멤버 변수와 함수, 생성자, 소멸자를 작성하고, 다음과 같이 실행되도록 전체 프로그램을 완성하라. ...

2020년 3월 9일 · 4 분 · Sobamemil

명품 C++ programming 실습 문제 8장 7번

문제 : 아래와 같은 BaseMemory 클래스를 상속받는 ROM(Read Only Memory), RAM 클래스를 작성하라. BaseMemory에 필요한 코드를 수정 추가하여 적절히 완성하라. 1 2 3 4 5 class BaseMemory{ char *mem; protected: BaseMemory(int size) { mem = new char [size]; } }; ROM은 읽기 전용 메모리이므로 작동 중에 값을 쓸 수가 없기 때문에, 공장에서 생산할 때 생산자가 요청한 데이터로 초기화 하는데 이 작업을 굽는다(burn)라고 한다. 그러므로 ROM은 반드시 생성자에서 burn 작업이 일어나야 한다. ...

2020년 3월 9일 · 3 분 · Sobamemil