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)`构造函数。结果`Animal`中的`name_`字段保持为空,尽管我传入了名字!如何让名字传递到基类?另外,基类构造函数调用有哪些规则?