2014-04-25 133 views
1

我有兩個類,一個矩陣,然後是從Matrix類繼承的對角矩陣。C++類轉換運算符

顯然,從對角轉換爲矩陣很容易,但轉換需要轉換。

class Diagonal : public Matrix<T> 
{ 
    operator Matrix<T>() const; 
}; 

已存在在我的代碼,我認爲應該轉換。在主,我有:

Matrix<float> theMatrix(size,size); 
    Diagonal<float> theDiag(size,size); 
    theDiag = theMatrix; 

一切都正常運行,除了轉換,還告訴我:

no known conversion for argument 1 from ‘Matrix<float>’ to ‘const Diagonal<float>&’ 

有什麼建議?謝謝。

回答

0

您的代碼

class Diagonal : public Matrix<T> 
{ 
    operator Matrix<T>() const; 
}; 

定義了從Diagonal<T>Matrix<T>轉換,而你的任務預計從Matrix<T>Diagonal<T>轉換。

你的意思是寫這個呢?

class Matrix<T> 
{ 
    operator Diagonal<T>() const; 
}; 

現在,即使這個工程*(我懷疑,因爲它會導致循環依賴),我不知道這是否有意義從語義的角度。 並非每個矩陣都是對角矩陣,因此從矩陣轉換爲對角矩陣不能保留所有數據。從設計的角度來看,對這種情況使用隱式轉換是一個壞主意。

*另一種方法是爲Diagonal<T>定義operator=(const Matrix<T>&)

+0

謝謝,我完全是在思考倒退。運營商=也是一個好主意。 – Terold