1. 문제
9. 통계를 내는 Statistics 클래스를 만들려고 한다. 데이터는 Statistics 클래스 내부에 int 배열을 동적으로 할당받아 유지한다. 다음과 같은 연산이 잘 이루어지도록 Statistics 클래스와 !, >>, <<, ~ 연산자 함수를 작성하라.
2. 결과
3. 코드
#include <iostream>
using namespace std;
class Statistics {
int *p;
int count;
public :
Statistics(){ p = new int[10]; count=0; }
bool operator ! () {
if( count == 0 ) return true;
else return false;
}
Statistics& operator << (int n) {
p[count] = n;
count++;
return *this;
};
void operator ~ () {
for(int i=0; i< count; i++)
cout << p[i] << ' ';
cout << endl;
}
void operator >>(int& avg) {
int sum=0;
for(int i=0;i< count;i++)
sum += p[i];
avg = sum / count;
}
};
int main() {
Statistics stat;
if(!stat) cout << "현재 통계 데이타가 없습니다." << endl;
int x[5];
cout << "5 개의 정수를 입력하라>>";
for(int i=0; i<5; i++) cin >> x[i];
for(int i=0; i<5; i++) stat << x[i];
stat << 100 << 200;
~stat;
int avg;
stat >> avg;
cout << "avg=" << avg << endl;
}
4. 설명
Statistics 클래스는 내부에 int 배열을 동적으로 할당 받습니다. 그러므로 생성자에서 임의로 크기가 10인 int 배열을 선언한 후 이용하였습니다.
"!" 연산자 함수는 return 형이 bool 입니다. 이 함수는 클래서 멤버 변수인 배열의 저장된 데이터가 없을 시 true를 리턴 합니다. 저는 편의상 배열 요소의 개수를 저장할 int count를 선언한 후 이용하였습니다.
"<<" 연산자 함수는 stat << 100 << 200; 이처럼 연속적으로 값을 입력받기 위해서 리턴 형을 Statistics& 로 해줍니다.
-> 입력한 값을 저장해준 후 return *this; 를 해주시면 됩니다.
1. 문제
10. 스택 클래스 Stack을 만들고 푸시(push)용으로 << 연산자를, 팝(pop)을 위해 >> 연산자를, 비어 있는 스택인지를 알기 위해 ! 연산자를 작성하라. 다음 코드를 main()으로 작성하라.
2. 결과
3. 코드
#include <iostream>
using namespace std;
class Stack {
int stack[10];
int top;
public :
Stack() { top=-1; }
Stack& operator <<(int n) {
top++;
stack[top] = n;
return *this;
}
Stack operator >>(int &n) {
n = stack[top];
top--;
return *this;
}
bool operator !() {
if( top == -1 ) return true;
else return false;
}
};
int main() {
Stack stack;
stack << 3 << 5 << 10;
while(true) {
if(!stack) break;
int x;
stack >> x;
cout << x << ' ';
}
cout << endl;
}
4. 설명
Stack의 기능을 하는 Stack 클래스를 구현합니다.
"<<" 푸시 기능을 하도록 해야 하므로 스택의 push처럼 top을 하나씩 증가시킨 후 값을 저장해 줍니다.
-> 이 문제에서도 stack << 3 << 5 ... 이처럼 연속적으로 입력받을 수 있도록 리턴 형을 Stack& 으로 해줍니다.
">>" 팝 기능을 하도록 구현합니다.
"!" 은 top == -1 이면 저장된 값이 없는 것이므로 이경우에는 return true;를 해줍니다.
'명품 C++ programming' 카테고리의 다른 글
명품 C++ programming 실습문제 8장 1번 (0) | 2019.04.21 |
---|---|
명품 C++ programming 7장 Open Challenge (0) | 2019.04.18 |
명품 C++ programming 실습문제 7장 7번, 8번 (0) | 2019.04.17 |
명품 C++ programming 실습문제 7장 6번 (0) | 2019.04.17 |
명품 C++ programming 실습문제 7장 5번 (0) | 2019.04.16 |