저는 전략 패턴에 따라 행렬을 구현하고 있습니다. Matrix에 대한 포인터를 보유하고있는 MyMatrix와 Matrix-SparseMatrix & RegMatrix를 상속받은 두 개의 하위 클래스가 있습니다. 두 개의 행렬을 추가 할 때 어느 행렬에 어떤 행렬을 추가하는지 알 수 없기 때문에 각 상속 클래스의 내부 메서드를 사용하는 기본 함수를 구현했으며 추가 할 때 - 왼쪽에 새 요소를 추가하기 만합니다. 매트릭스.기본 클래스 객체 내부에서 파생 클래스 객체 만들기
잘 작동합니다.
내 문제는 - 이제 행렬 곱셈을 수행하려고합니다. 이 메서드는 기본 클래스 인 Matrix에서 구현하려고합니다. 이것은 내가 무엇을 가지고 지금까지 :
는Matrix& multiple(Matrix &other)
{
double result = 0;
int newMatrixRowSize = getRowSize();
int newMatrixColSize = other.getColSize();
double *resultArray = new double[newMatrixRowSize*newMatrixColSize];
for (int i = 1; i <= getColSize(); i++)
{
for (int j = 1; j <= other.getColSize(); j++)
{
for (int k = 1; k <= other.getRowSize(); k++)
{
Pair firstPair(i,k);
Pair secondPair(k,j);
result += getValue(firstPair)*other.getValue(secondPair);
}
Pair resultIndex(i,j);
resultArray[getNumIndex(resultIndex, newMatrixRowSize, newMatrixColSize)] = result;
result = 0;
}
}
delete [] resultArray;
}
유일한 문제는 지금은 그냥 새로운 RegMatrix 또는 희소 행렬을 만들 수 있고, 수에 따라, 왼손 매트릭스에 새로운 요소를 추가 할 수있다 행렬에있는 0의 수 - 행렬의 적법한 표현으로 바꿉니다.
내 질문은 - 그것은 "합법적 인"또는 기본 클래스의 인스턴스를 만드는 좋은 연습은 기본 클래스 안에 파생 된 클래스? 팩토리 패턴을 사용하지 않으려 고하고 행렬의 종류를 알지 못하면 다형성을 더 기꺼이 수행하고자합니다.
"나는 피하려고를 팩토리 패턴을 사용하고, 손에있는 행렬의 종류를 모른 채로 다형성을 기꺼이 수행하려고합니다. "행렬이 없습니다. 당신은 하나만 창조하려고합니다. Matrix 객체가 없으므로이 단계에서는 Matrix 객체의 다형성 동작이 없습니다. –
Matrix 메서드 내에서 Matrix 파생 개체를 만드는 데 아무런 문제가 없습니다. Matrix 객체를 반환하는 다른 방법은 없습니다. 공장 패턴을 사용하기를 꺼리는 것은 잘 정립되지 않은 것처럼 보입니다. –