매거진으로 의미 있는 수조를 정의하여 표시하다

3883 단어 배열
개발 과정에서 일부 수조를 자주 사용하는데, 그 안에 일정 수량의 특정 요소를 저장한다.숫자로 표시된 수조를 사용하여 수조의 원소에 접근할 때 이 원소가 필요한 원소인지 아닌지 알 수 없으며 코드의 가독성을 떨어뜨리고 하표가 경계를 넘을 위험도 있다.예를 들어 현재 다음과 같은 계승 체계가 있다.
1 class CShape;
2
3 class CSquare : public CShape;
4
5 class CRectangle : public CShape;
6
7 class CCircle : public CShape;
8
9 class CEllipse : public CShape;

모든 형태의 대상을 저장할 수 있는 바늘이 필요합니다.가장 간단한 것은 다음 코드를 사용하여 배열을 정의하고 배열 요소에 값을 지정하는 것입니다.
1 CShape * arrShape[4];
2
3 arrShape[0] = new CSquare();
4 arrShape[1] = new CRectangle();
5 arrShape[2] = new CCircle();
6 arrShape[3] = new CEllipse();

이런 코드는 당연히 아무런 문제가 없다.그러나 매번 직사각형의 대상 바늘을 얻을 때마다arrShape[1]로 접근해야 한다.이런 코드는 가독성이 매우 떨어진다. 만약에 앞의 수조 부수 코드를 보지 않으면arrShape[1]에 저장된 것이 무엇인지 알 수가 없다.그리고 자칫 수조 하표를 잘못 써서 하표가 경계를 넘는 오류가 발생할 수도 있다.C++는 컴파일 단계에서 커서 경계를 검사하지 않기 때문에 커서 경계를 넘는 오류는 실행할 때만 드러납니다.잘못된 코드가 정의된 수조와 수조 요소에 값을 부여하는 코드와 거리가 멀면 찾기도 번거롭다.또한 이 코드의 확장성도 매우 떨어진다. 만약 이 계승 체계에 삼각형이 추가된다면, 수조 정의와 수조 요소에 값을 부여하는 코드는 모두 수정해야 한다.위에서 말한 여러 가지 결점을 피할 좋은 방법이 있습니까?물론 있습니다. 그것은 매거진으로 의미 있는 수조를 정의하여 표시하는 것입니다.위의 예에서는 다음과 같은 열거 유형을 정의할 수 있습니다.
1 enum ShapeIndex
2 {
3 eSqure,
4 eRectangle,
5 eCircle,
6 eEllipse,
7 eShapeCount
8 };

배열 정의 및 지정에는 다음 코드가 사용됩니다.
1 CShape* arrShape[eShapeCount];
2
3 arrShape[eSquare] = new CSquare();
4 arrShape[eRectangle] = new CRectangle();
5 arrShape[eCircle] = new CCircle();
6 arrShape[eEllipse] = new CEllipse();

이렇게 하면 타원형의 대상 바늘을 얻을 때마다arrShape[eEllipse]를 사용하여 접근할 수 있다.eEllipse라는 의미 있는 배열 아래 첨자를 통해 배열 요소 포인터가 가리키는 대상을 한눈에 볼 수 있습니다.만약 수조에 대한 접근이 모두 이런 방법을 사용한다면, 수조 아래에 경계를 넘는 오류를 효과적으로 피할 수 있을 것이다.또 이런 방법은 수조를 확장할 수 있게 한다.만약 이 계승 체계에 다른 하위 클래스가 추가된다면, 매거에 eShapeCount 앞에 상응하는 항목을 추가하면 된다. 그룹 정의의 코드는 수정할 필요가 없다. (물론 그룹 요소의 값을 추가하는 코드를 잊지 말아야 한다.)
 
에서

좋은 웹페이지 즐겨찾기