-
명품 C++ 7장 12번C++ 2018. 11. 3. 15:52
12. 정수 배열을 항상 증가 순으로 유지하는 SortedArray 클래스를 작성하려고 한다. 아래의 main() 함수가 작동할 만큼만 SortedArray 클래스를 작성하고 +와 = 연산자도 작성하라.
소스코드
#include <iostream>using namespace std;class SortedArray {int size; // 현배 배열의 크기int *p; // 정수 배열에 대한 포인터void sort(); // 정수 배열을 오름차순으로 정렬public:SortedArray(); // p는 NULL로 size는 0으로 초기화SortedArray(SortedArray& src); // 복사 생성자SortedArray(int p[], int size); // 생성자. 정수 배열과 크기를 전달받음~SortedArray(); // 소멸자SortedArray operator + (SortedArray& op2); // 현재 배열에 op2 배열 추가SortedArray& operator = (const SortedArray& op2); // 현재 배열에 op2 배열 복사void show(); // 배열의 원소 출력};void SortedArray::sort() {for (int i = 0; i < size-1; ++i) {for (int j = 1; j < size - i; ++j) {if (p[j - 1] > p[j]) {int temp = p[j - 1];p[j - 1] = p[j];p[j] = temp;}}}}SortedArray::SortedArray() {p = NULL; size = 0;}SortedArray::~SortedArray() {if (p)delete[] p;}SortedArray::SortedArray(int p[], int size) {this->size = size;this->p = new int[size];for (int i = 0; i < size; ++i) {this->p[i] = p[i];}}SortedArray::SortedArray(SortedArray& src) {this->size = src.size;this->p = new int[src.size];for (int i = 0; i < src.size; ++i)this->p[i] = src.p[i];}SortedArray SortedArray::operator+(SortedArray& op2) {SortedArray tmp;tmp.p = new int[this->size+op2.size];tmp.size = this->size + op2.size;for (int i = 0; i < this->size; ++i)tmp.p[i] = this->p[i];for (int i = 0; i < op2.size; ++i)tmp.p[i+ this->size] = op2.p[i];return tmp;}SortedArray& SortedArray::operator=(const SortedArray& op2) {delete[] this->p;this->p = new int[op2.size];this->size = op2.size;for (int i = 0; i < op2.size; ++i)this->p[i] = op2.p[i];return *this;}void SortedArray::show() {this->sort();cout << "배열 출력 : ";for (int i = 0; i < this->size; ++i)cout << p[i] << ' ' ;cout << endl;}int main() {int n[] = { 2,20,6 };int m[] = { 10,7,8,30 };SortedArray a(n, 3), b(m, 4), c;c = a + b; // +, = 연산자 작성 필요// + 연산자가 SortedArray 객체를 리턴하므로 복사 생성자 필요a.show();b.show();c.show();}실행결과
정렬은 버블 정렬을 사용했습니다. https://terms.naver.com/entry.nhn?docId=2270437&cid=51173&categoryId=51173
+ 연산자느 SortedArray 객체를 리턴하므로 복사 생성자가 반드시 필요합니다. a=b; 연산에서 = 연산자는 객체 a의 배열 메모리를 모두 delete 시키고 객체 b의 크기만큼 다시 할당받은 후 객체 b의 배열 내용을 복사하도록 작성되어야 합니다.
'C++' 카테고리의 다른 글
명품 C++ 8장 1번 2번 (0) 2018.11.04 명품 C++ 7장 Open Challenge (0) 2018.11.03 명품 C++ 7장 11번 (0) 2018.11.03 명품 C++ 7장 10번 (0) 2018.11.03 명품 C++ 7장 9번 (0) 2018.11.03