2020-10-22 고급프로그래밍

Hyeonu_Chun·2021년 6월 22일
0

Absolute C++ 6th ed./Savitch Chap.8 Programming Project. 4

  1. 문제 기술
    필자는 본문의 8.7을 응용하여 멤버변수의 교체와 그에 따른 멤버함수들을 변환 및 생성자 추가를 요한다.

  2. 설계 계획
    기본적인 틀은 다 설계가 되어있기에 문제에서 요구하듯, 기존 멤버변수를 삭제 시키고 배열과 사용중인 배열의 방의 사이즈를 나타내는 정수값을 변수로 둔다. 멤버변수를 초기화 시키는 디폴트 생성자, 오버로디드 생성자를 만들고 변수들이 변함에 따라 기존에 오버로딩 된 연산자의 정의를 바꾼다.

  3. 데이터 처리 과정
    CharPair type의 a, b, c를 생성하게 되면 arguments에 따라 각각 디폴트 생성자, 오버로디드 생성자들이 호출되어 객체 생성을 완료한다. 객체 생성이 정상적으로 완료되었는지 확인하기 위해 각 객체마다 멤버변수를 확인할 수 있는 멤버함수를 불러 클래스 내부의 멤버변수를 간접적으로 확인한다.

  4. 실행 결과 및 분석

#include <iostream>
#include <cstdlib>
using namespace std;

class CharPair {
public:
	CharPair();
	CharPair(int sz);
	CharPair(int sz, char array[]);
	char& operator[](int index);
	int returnSize() { return size; }

private:
	char array[100];
	int size;
};

CharPair::CharPair() {
	size = 10;
	for (int i = 0; i < 100; i++) this->array[i] = '#';
}

CharPair::CharPair(int sz) : size(sz) {
	for (int i = 0; i < 100; i++) this->array[i] = '#';
}

CharPair::CharPair(int sz, char array[]) : size(sz) {
	for (int i = 0; i < 100; i++) this->array[i] = array[i];
}

char& CharPair::operator[](int index) {
	int num = 0;
	for (int i = 0; i < this->size; i++) {
		if (index == i) {
			num = 1;
			return this->array[i];
		}
	}
	if (num == 0) {
		cout << "Illegal index value. \n";
		exit(1);
	}
}

int main() {
	char array[] = { 'a', 'b', 'c', 'd' ,'e' };
	CharPair a;
	CharPair b(1);
	CharPair c(5, array);

	cout << "1. Size of a = " << a.returnSize() << ", a[2] = " << a[2] << endl;

	cout << "2. Size of b = " << b.returnSize() << ", b[0] = " << b[0] << endl;

	cout << "3. Size of c = " << c.returnSize() << ", c[4] = " << c[4] << endl;

	return 0;
}


기존 Display 8.7의 코드에 멤버 변수의 변화에 따라 작성된 코드이다. 오버로딩 연산자에서 기존코드에선 단순하게 배열을 흉내 냈을 뿐이지만 이번 과제에선 직간접적으로 배열을 이용해 원하는 배열의 방을 뽑아내야 함과 동시에 예외처리를 해야 했다. 콘솔창에서 입력 받는 변수가 없어 단순변수를 이용해 예외처리를 진행하였다.

profile
Stay hungry, stay foolish

0개의 댓글