كيف تستخدم مُنشئ غير الافتراض لعضو؟
-
21-09-2019 - |
سؤال
لدي فصلين
class a {
public:
a(int i);
};
class b {
public:
b(); //Gives me an error here, because it tries to find constructor a::a()
a aInstance;
}
كيف يمكنني الحصول عليها حتى يتم إنشاء instance مع (int i) بدلاً من محاولة البحث عن مُنشئ افتراضي؟ في الأساس ، أريد التحكم في استدعاء مُنشئ A من داخل مُنشئ B.
المحلول
تحتاج إلى استدعاء (int) بشكل صريح في قائمة مُهيئة المنشئ:
b() : aInstance(3) {}
حيث 3 هي القيمة الأولية التي ترغب في استخدامها. على الرغم من أنه يمكن أن يكون أي int. انظر تعليقات للحصول على ملاحظات مهمة على الطلب والتحذيرات الأخرى.
نصائح أخرى
استخدم قائمة التهيئة:
b::b() : aInstance(1) {}
ما عليك سوى استخدام مُنشئ يتم تعريفه على هذا النحو:
class b {
public:
b()
: aInstance(5)
{}
a aInstance;
};
أعتقد أنه يجب عليك استخدام مؤشر إلى "A" مثل:
class b {
public:
b() : aInstance(new a(5)) {}
a *aInstance;
};
بهذه الطريقة سيكون لديك سلوك محدد. بالطبع ستحتاج إلى تحرير *ainstance في المدمر.
لا تنتمي إلى StackOverflow