cout << sId << ' ' << sName << " 의 평균 점수는 " << dTotal / i << " 입니다." << endl; delete sName, sId;
return 0; }
해설 - vector STL 자료형은 이전 문제에서 자세히 다루었습니다. 참고 하시기 바랍니다. - 나머지 부분은 크게 어렵지 않습니다. - 문자열 포인터를 생성후 동적으로 입력 받은 글자의 길이만큼 새로 생성하여 추가하는 방식을 썼습니다. 생성 및 삭제에 new / delete 명령어가 쓰입니다.
해설 - 이번 문제에선 복사 생성자가 그다지 역할을 하지 않았습니다. 포인터를 쓰기 때문에 의무적으로 적은 거 뿐입니다. 만약 할당 연산자나 복사시 이 생성자는 서로 다른 주소로 자료를 저장하기 위해서 필수적으로 적어 두셔야 합니다.
- new 로써 동적으로 포인터에 배열을 붙여서 접근을 할수 있습니다. 프로그램 종료시 delete 하여 자원의 낭비를 줄입니다.
- 마찬가지로 생성시 new 로 문자열을 늘렸기 때문에 소멸시에 delete 로써 문자열을 삭제 합니다. 이는 파괴자(소멸자)에서 그 역할을 할수 있기 기술합니다.
- CStu[0]->m_ViewProfie() 에서 -> 연산자는 (*CStu[0]).m_ViewProfile() 과 같습니다. 우선순위로 인해 괄호를 넣기가 번거로워서 -> 연산자를 추가했습니다.
참고 - 객체지향적 프로그래밍은 C++ 기초 다음 단계이므로 차근 차근 공부 하시면 이해하기가 쉽습니다. 구조체를 먼저 이해하시고 클래스를 배우신후 private / public / protect 형 그리고 맴버함수와 변수 생성자와 파괴자 상속과 연산자, 가상함수... 이런식으로 계속 배우시면 됩니다.
해설 - 메모리를 동적으로 받아 넣기 위해서 문자열 포인터를 썼습니다. - new 명령어를 통해 새로운 공간을 받아 넣습니다. 그 크기는 입력 변수에 받은 길이 + 1 [NULL 문자] 입니다. - strcat 나 strcpy 에서는 NULL 문자를 붙여 넣거나 복사를 시도하면 연산 오류가 생깁니다. - cout 에서는 형에서 비교적 자유롭게 출력이 가능하므로 int 형으로 리턴이 되는 tolower 나 toupper 를 정수로 나오지 않게 하기 위해 char 형으로 강제 형변환 시켰습니다.
printf("-50 ~ 0 범위의 개수 : %d 개\n",cMinus); printf(" 1 ~ 50 범위의 개수 : %d 개\n",cZero); printf(" 51 ~ 100 범위의 개수 : %d 개\n",cFifty);
printf("\n생성된 난수의 평균 : %f\n",(float)total/50000);
gen = NULL; free(gen); return 0; }
5. 해설 - 이전에 공부 한 것이 있어서 쉽게 동적 할당에 대해 접근 할수 있었습니다. - calloc 함수로 간단하게 생성했습니다. 보통은 malloc 을 씁니다만 초기화 때문에 calloc 을 썼습니다. - 마지막엔 NULL 에 맞추고 free 함수로 동적 할당된 자원을 반환 합니다. 그렇지 않으면 메모리 누수가 발생합니다. 요즘은 메모리 자원이 풍부하여 부족될 일은 자주 없지만 free 함수나 delete (C++) 로 비우는 에티켓이 필요합니다.