سؤال

وهذا قد يكون السؤال مبتدئ، ولكن لا أستطيع معرفة ذلك عن طريق التفتيش الكتاب لدي. منشئ الفئة التي تهيئة الزوجي اثنين، وأريد التعليمة البرمجية التالية لإخراج تلك الزوجي اثنين مع <<.

Complex x( 3.3, 1.1 );

cout << "x: " << x;

وبعد هذا كنت بحاجة إلى زيادة التحميل >> لقبول الزوجي اثنين الى هذه. هذا هو سؤالي الأول هنا، حتى إذا معلوماتي بشرط تفتقر يبلغني

وتحرير: لدي الآن لمنشئ وبيان إثقال هذا:

#include "Complex.h"

Complex::Complex( double realPart, double imaginaryPart )
: real( realPart ),
imaginary( imaginaryPart )
{

}

std::istream& operator>>(std::istream& strm, const Complex &c)
{
   double r,i;
   strm >> r >> i;
   c = Complex(r,i);
   return strm;
}

وأنا أعرف أن لدي لتغيير "CONST ج مجمع و" و "ج = مجمع (ص، ط)؛" لكنني لست متأكدا من كيفية التوجه نحو ذلك. أيضا، وأنا أقول هنا أن هذه ليست حول الطبقة مجمع مكتبة الأمراض المنقولة جنسيا، على الرغم من أنها تقوم على نفس الفكرة. وحتى الآن كان الجميع مساعدة كبيرة، ولكن لدي حالة البكم اليوم.

هل كانت مفيدة؟

المحلول

مشغل <<:

وstd::cout هو كائن std::ostream، ولذلك عليك أن تفرط operator<< لostream، الذي يأخذ std::complex<double> كحجة، على افتراض استخدام std::complex<double> من مجمع رأس القياسية. منذ يجب أن لا إجراء تغييرات داخلية لالحاويات والطبقات القياسية، وجعلها مستقل.

#include <iostream>
#include <complex>

std::ostream& operator<<(std::ostream& strm, const std::complex<double>& c)
{
    strm << "real: " << c.real() << "imag: " << c.imag();
    return strm;
}

مشغل >>:

وoperator>> يأخذ الكائن std::istream، الذي يفعل عكس ما يفعل std::ostream. إذا كنت تستخدم تيارات لالتسلسل مثل هذا، انها فكرة جيدة لتمكين استثناءات بالنسبة لهم أيضا. وعادة ما تريد فقط لرمي على std::ios::badbit.

#include <iostream>
#include <complex>

std::istream& operator>>(std::istream& strm, std::complex<double>& c)
{
    double r,i;
    strm >> r >> i;
    c = std::complex<double>(r,i);
    return strm;
}

إذا كنت بحاجة إلى الوصول إلى أعضاء الداخلية للطبقة، وكنت تحديد وظيفة فوق طاقتها كصديق. ولكن منذ الأمراض المنقولة جنسيا :: :: معقدة الحقيقي () والأمراض المنقولة جنسيا :: :: معقدة ايماج () هي جزء من واجهة العامة، وهذا لا حاجة هنا. وعلى سبيل المثال istream، ونحن ببساطة استدعاء نسخ منشئ التي هي أيضا جزء من واجهة العامة.

وأنا افترض أنك تريد استخدام CIN و cout هنا. ولكن إذا كنت تريد أن تفرط في المشغلين لشيء آخر، وينطبق الشيء نفسه. إذا قمت بتطبيق المشغلين داخل تعريف فئة، لديك حق الوصول إلى مؤشر this، وبالتالي فإن وظيفة المشغل يجب أن يأخذ فقط وسيطة واحدة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top