매거진으로 의미 있는 수조를 정의하여 표시하다
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 앞에 상응하는 항목을 추가하면 된다. 그룹 정의의 코드는 수정할 필요가 없다. (물론 그룹 요소의 값을 추가하는 코드를 잊지 말아야 한다.)
에서
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Java를 사용하여 Eclipse 콘솔에 캘린더를 표시해 보았습니다.어디까지나 메모용으로서. ・cal.set(int year,int month-1,1) 할 때 달이 「0부터 11」⇒「1월에서 12월」에 세트 되는 것을 잊어 경향이 있었다. ・cal.getActualMaximum(Ca...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.