我正在根據策略模式實現矩陣。 因爲我有MyMatrix,它包含一個指向Matrix的指針,以及兩個從Matrix繼承的子類 - SparseMatrix & RegMatrix。當我添加兩個矩陣時,因爲我無法知道哪個矩陣被添加到哪個矩陣中,我實現了一個使用每個繼承類的內部方法的基本函數,並且在添加時 - 我只是將新元素添加到左邊矩陣。在基類對象內創建派生類對象
這工作正常。
我的問題是 - 我現在想執行矩陣乘法。 我想在基類 - 矩陣中實現此方法。 這是我到現在爲止:
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或稀疏矩陣,並根據數量矩陣中的零點 - 交換到矩陣的合法表示。
所以我的問題是 - 它是「合法的」或良好的做法,在基類內創建一個基類派生類的實例? 我想避免使用工廠模式,並且更願意在不知道手中的矩陣類型的情況下做多形的事情
「我想避免使用工廠模式,並且更願意在不知道手中的矩陣類型的情況下做些多態的事情「你沒有矩陣。你只打算創建一個。在這個階段沒有Matrix對象的多態行爲,因爲沒有Matrix對象。 – 2014-09-02 14:01:29
在Matrix方法內創建矩陣派生對象沒有任何問題。沒有其他方法可以從中返回Matrix對象。你不願意使用工廠模式似乎沒有根據。 – 2014-09-02 14:04:24