المشغل التبادلي الزائد + من كائنين مختلفين
-
04-10-2019 - |
سؤال
لدي فئتان تمثل مصفوفة:
1. تمثيل منتظم - O (n^2)
2. Sparsematrix - مصفوفة تم تمثيلها كقائمة مرتبطة (بدون أصفار).
لنقول لدي:
RegularMatrix a;
SparseMatrix b;
أريد أن أكون قادرًا على القيام:
a+b;
و أيضا:
b+a;
لذلك أنا أفرط في تحميل + مشغل. سؤالي هو ، بما أنني أريد أن تكون الإضافة مبتدئة (A+B = B+A) ، هل أحتاج إلى تنفيذ 2 من التحميل الزائد ، واحد لكل حالة؟
RegularMatrix operator+(const RegualarMatrix &, const SparseMatrix &);
RegularMatrix operator+(const SparseMatrix & ,const RegualarMatrix &);
أم أن هناك شكل عام يقرره المترجم بنفسه؟
شكرًا لك
المحلول
نعم أنت بحاجة إلى كلا الإصدارين. ولكن يمكنك إعادة توجيه واحد إلى الآخر ، إذا كانت العملية بالفعل مبتدرة
RegularMatrix operator+(const SparseMatrix &a, const RegualarMatrix &b) {
return b + a;
}
نصائح أخرى
كلا الإصدارين مطلوبان ، فقط اكتب بعد الحمل الزائد الأول:
RegularMatrix operator+(const SparseMatrix &a, const RegualarMatrix &b)
{
return operator+(b,a);
}
أو نسخة أبسط:
RegularMatrix operator+(const SparseMatrix &a, const RegualarMatrix &b)
{
return b + a;
}
لا تنتمي إلى StackOverflow