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; 를 해주시면 됩니다.

 

 

 
"~" 연산자 함수는 통계 데이터를 모두 출력하는 함수로서 count 변수와 for문을 이용하여서 간단히 출력할 수 있습니다.
 
 
">>" 연산자 함수는 배열 요소들의 평균을 구하여 줍니다. 이 또한 for문과 count 변수를 이용하시면 간단히 구현하실 수 있습니다. 
 
 

 

 

 

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;를 해줍니다.

 

+ Recent posts