سؤال

أثناء قراءة الإجابات على هذا سؤال لدي شك فيما يتعلق بالبناء الافتراضي للكائنات في المتجه.لاختباره كتبت رمز الاختبار التالي:

struct Test
{
    int m_n;

    Test(); 

    Test(const Test& t);

    Test& operator=(const Test& t);
};

Test::Test() : m_n(0)
{
}

Test::Test(const Test& t)
{
    m_n = t.m_n;
}

Test& Test::operator =(const Test& t)
{
    m_n = t.m_n;
    return *this;
}


int main(int argc,char *argv[])
{
    std::vector<Test> a(10);
    for(int i = 0; i < a.size(); ++i)
    {
        cout<<a[i].m_n<<"\n";
    }

    return 0;
}

ومن المؤكد أنه يتم استدعاء المُنشئ الافتراضي لبنيات الاختبار أثناء إنشاء الكائن المتجه.لكن ما لا أستطيع فهمه هو كيف تقوم STL بتهيئة الكائنات التي أقوم بإنشاء متجه لنوع البيانات الأساسي مثل متجه ints نظرًا لوجود مُنشئ افتراضي لها؟أي.كيف تكون قيمة كل ints في المتجه 0؟لا ينبغي أن يكون القمامة؟

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

المحلول

ويستخدم ما يعادل منشئ الافتراضي ل[إينتس]، وهو إلى الصفر التهيئة لهم. يمكنك أن تفعل ذلك صراحة:

int n = int();

وسيحدد ن الى نقطة الصفر.

لاحظ أن البناء الافتراضي يستخدم فقط والمطلوب إذا تم إعطاء ناقلات حجم الأولي. إذا قال لك:

vector <X> v;

وليس هناك شرط أن يكون X منشئ افتراضي.

نصائح أخرى

std::vector<Type> a(10);        // T could be userdefined or basic data type

ناقلات يدعو في الأساس default بالنسبة للنوع الذي يشير إليه: Type()

  • إذا كان نوع البيانات الأساسي مثل int ، فإن Double موجودة ، فسيحصل int () ، double () {int () على قيمة 0}
  • إذا قام المستخدم بتحديد نوع البيانات ، فسيتم استدعاء المنشئ الافتراضي.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top