2014-04-28 4 views
3

대학 과정의 경우 C++에서 선형 방정식 시스템 (및이를 해결하는 방법)을 구현하고 있습니다. 이 시스템은 (스파 스) 행렬과 벡터로 구성됩니다. 매트릭스를 구현하고 그것에 관련된 몇 가지 함수를 제공하기 위해 여분의 클래스를 작성했습니다 (대칭인지 확인하고, 벡터에 곱하고, 표준 출력으로 인쇄하는 등).클래스에서 상속하거나 구성 요소로 사용 하시겠습니까?

내 질문은 다음과 같습니다 : "systemLinearEquations"클래스가 "sparseMatrix"클래스를 상속해야 하는가, 아니면 "sparseMatrix"클래스의 구성 요소를 가져야합니까?

어떤 방법 으로든 이점/단점은 무엇입니까?

답변

4

선형 방정식은 행렬이 아니며 대신 1로 표시됩니다. 일반적으로 이러한 경우에는 상속에 비해 합성을 선호해야합니다.

이렇게 생각하십시오. 누군가 선형 방정식을 매트릭스처럼 위협 할 수 있습니까? 모든 행렬 연산이 선형 방정식에 대해 의미가 있습니까? 두 질문에 대한 대답이 모두 yes이라면 매트릭스를 상속하는 것이 더 좋은 선택이지만 그렇지 않으면 작문을 더 잘 활용하십시오.

2

일반적으로 상속은 일반성을 충족합니다. 즉, 기본 클래스는 일반적인 절차를 제공하고 하위 클래스는 기본 동작의 특정 구현 (재정의) 또는 확장을 제공합니다.

은 그래서 정말 당신이 ... 후

1

가장 중요한 기준을 찾고있는 것을 따라 달라 공공 상속는 은 IS-A 관계를 나타냅니다. 다음은 class Gadget : public Widget입니다. 모든 GadgetWidget이며 Widget이 수행 할 수있는 모든 작업을 수행 할 수 있습니다. 조작시 입력시 Widget이 입력되면 Gadget이 전달되면 정상적으로 작동해야합니다.

상속 디자인을 판단 할 때 사용해야하는 안경입니다. 선형 시스템은 행렬이 사용될 수있는 모든 곳에서 사용될 수 있고 행렬이 지원하는 모든 연산을 지원하면 상속이 가능합니다. 그렇지 않으면 작곡을 선호해야합니다.

구체적인 작업에 대해 자세히 알지 못하지만 개인적으로 여기서는 구성을 선호합니다. 행렬은 반드시 transpose() 연산을 지원합니다. 선형 시스템으로 무엇을해야합니까? 사각형이 아닌 경우 오른쪽면의 값을 가져 오는 데 어려움을 겪을 수 있습니다.

관련 문제