Avatar ·

قواعد استدعاء المُنشئ للفئة الأساسية في C++

مرحباً بالجميع! لقد بدأت للتو في تعلم C++ ولا أستطيع فهم قواعد استدعاء المُنشئ للفئة الأساسية عند الوراثة. لنفترض أن لدي فئة بسيطة `Animal` وفئة `Dog` ترث منها: ```cpp class Animal { public: Animal() { cout << "Animal created\n"; } Animal(string name) : name_(name) { cout << "Animal " << name << " created\n"; } private: string name_; }; class Dog : public Animal { public: Dog() { cout << "Dog created\n"; } Dog(string name) { cout << "Dog " << name << " created\n"; } }; ``` عندما أنشئ كائن `Dog` بدون معاملات، يتم استدعاء المُنشئ الافتراضي `Animal()`، وهذا منطقي. ولكن عندما أكتب `Dog d("Buddy")`، يتم استدعاء `Animal()` أولاً ثم المُنشئ `Dog(string name)` الخاص بي. ونتيجة لذلك، يبقى الحقل `name_` في `Animal` فارغاً، على الرغم من أنني أمرر الاسم! كيف يمكنني جعل الاسم يُمرر إلى الفئة الأساسية؟ وبشكل عام، ما هي القواعد لاستدعاء مُنشئ الفئة الأساسية؟