قواعد استدعاء المُنشئ للفئة الأساسية في 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` فارغاً، على الرغم من أنني أمرر الاسم! كيف يمكنني جعل الاسم يُمرر إلى الفئة الأساسية؟ وبشكل عام، ما هي القواعد لاستدعاء مُنشئ الفئة الأساسية؟