7.9> 통계를 내는 Statistics 클래스를 만들려고 한다. 데이터는 Statistics 클래스 내부에 int 배열을 동적으로 할당받아 유지한다. 다음과 같은 연산이 잘 이루어지도록 Statistics 클래스와 !, >>, <<, ~ 연산자 함수를 작성하라.
<코드>
#include <iostream>
using namespace std;
class Statistics{ private: int size; //동적 배열의 사이즈 int index; //마지막 원소의 인덱스 int *p; //동적 배열을 가리킬 포인터 public: Statistics(int size=5,int index=-1); //기본 사이즈 5, 인덱스 -1(nothing) friend bool operator!(Statistics op); void operator>>(int &op); Statistics& operator<<(int op); void operator~();
}; Statistics::Statistics(int size,int index){ this->size=size; this->index=index; p=new int[size]; //size 크기만큼의 int 동적 배열 할당 }
bool operator!(Statistics op){ if(op.index==-1) //index가 -1이면 true 반환 return true; else return false; } void Statistics::operator>>(int &op){ //평균구하는 함수 int sum=0; for(int i=0;i<index+1;i++){sum+=p[i];} //실제 원소 개수는 index+1 (0부터시작하니까) op= sum/(index+1); //op에 평균값 넣어줌(참조라서 원본 바뀜) } Statistics& Statistics::operator<<(int op){ index++; //인덱스 증가 if(size<=index){ //인덱스를 하나키웠는데 size와 크기 같으면 배열 크기보다 원소가 많은 경우 int *tmp=new int[size+5]; //하나씩 키우면 자주 없앴다 만들었다 해야하니 5개씩 늘린다. for(int i=0;i<size;i++){ //(size+5로 하면 p크기가 size라서 오류날 수 있음) tmp[i]=p[i]; //p의 원소를 전부 tmp에 복사 } delete []p; //p가 가리키는 동적배열 힙에 반환 p=tmp; //tmp가 가리키는 배열을 p도 가리키게 함(어차피 tmp는 사라지므로 깊은 복사 필요 없음) size+=5; //size 5 추가 } p[index]=op; //index에 오퍼랜드 대입 return *this; //현재 객체의 참조 리턴(이름) } void Statistics::operator~(){ //전부 출력하는 함수 for(int i=0;i<index+1;i++){ //원소 개수 = index+1 cout<<p[i]<<" "; } cout<<endl; }
int main(void){ Statistics stat; if(!stat) cout<<"현재 통계 데이타가 없습니다."<<endl; int x[5]; cout <<"5 개의 정수를 입력하라>>"; for(int i=0;i<5;i++) cin >> x[i]; //x[i]에 정수 입력 for(int i=0;i<5;i++) stat << x[i]; //x[i] 값을 통계 객체에 삽입한다. stat << 100 << 200; //100, 200을 통계 객체에 삽입한다. ~stat; //통계 데이타를 모두 출력한다.
int avg; stat>>avg; //통계 객체로부터 평균을 받는다. cout<<"avg="<<avg<<endl; //평균을 출력한다. return 0; }
|
<결과창>
|
'컴퓨터 & 프로그래밍 & 전자공학 > C++' 카테고리의 다른 글
MyQueue Class (0) | 2017.12.31 |
---|---|
Stack class (0) | 2017.12.25 |
Circle class 오퍼레이터 오버로딩 (0) | 2017.12.25 |
Circle class (0) | 2017.12.25 |
Matrix class 활용, 연산자 오버로딩 (0) | 2017.12.25 |