Hem gerçek hem de karmaşık matrisleri işleyebilen bir matris sınıfı uygulamaya çalışıyorum. Çarpma operatörünü aşırı yüklemeye çalışırken sorunlara karışıyorum. Özellikle, bir çift matrisi karmaşık bir matrisle (o sırayla) çarpmaya çalıştığımda. Sonuç karmaşık olmalı, ancak * operatör bir çift matrisin bir üyesidir, karmaşık bir matrisin nasıl döndüğünü göremiyorum (bir arkadaş operatörünü kullanarak denedim, bu da işe yaramıyor.). İlgili kod snippet'ine: YaniC++ Hem Real hem de Karmaşık Matrisler ile bir Matrix Sınıfı için Operatör Aşırı Yüklemesi
template <class V> Matrix<T> operator *(const Matrix<V> &b)
{
long i, j, k; T temp; Matrix<T> c(mRows, b.Cols());
for (i = 0; i < mRows; i++)
for (j = 0; j < c.Cols(); j++)
{
for (temp = 0, k = 0; k < mCols; k++)
temp += this->Element(i, k)*b.Element(k, j);
c(i, j) = temp;
}
return c;
}
, Gerçek ve B ve C kompleksi ise, C = B bir çalışıyor, ancak C A B değil =. Özellikle, derleyici hatası, tip karmaşık (veya kabul edilebilir bir dönüştürme) alan global operatör bulunamadı diyerek "temp + =" satırını işaretler. Şablonu gerçek ve karmaşık tipler için tamamen uzmanlaştırmaktan kaçınmak istiyorum, bunun bir yolu var mı?
Şimdiden teşekkürler.
Sen şablonu ' Matris operatör * (const Matrix & a, const Matris & b)' –
Ayrıca bkz [Operatör Aşırı] (http://stackoverflow.com/questions/4421706/operator-overloading) beyan etmek istiyorum Lütfen. –
Teşekkürler, ama bu bir arkadaş operatörü olarak ilan edilmeli, değil mi? Ve bu yeni bir problem yaratır, yani birden fazla operatör işlenenlerle eşleşir. – DJM123