سؤال

لدي فئتان تمثل مصفوفة:
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;
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top