派生类中子对象的初始化和派生类中一般数据成员的初始化有什么区别举例子说明
时间: 2023-12-09 19:05:20 浏览: 190
在派生类中,子对象的初始化和一般数据成员的初始化是有区别的。子对象的初始化是通过调用基类的构造函数来完成的,而一般数据成员的初始化则是直接对其进行赋值或者调用其构造函数进行初始化。
举个例子,假设我们有一个基类Animal和一个派生类Dog,其中Dog是从Animal派生而来的:
```c++
class Animal {
public:
Animal() {
cout << "Animal constructor called." << endl;
}
};
class Dog : public Animal {
public:
int age;
string name;
Dog(int _age, string _name) {
age = _age;
name = _name;
cout << "Dog constructor called." << endl;
}
};
```
在这个例子中,Dog类有一个int类型的age和一个string类型的name成员变量,以及一个从Animal类派生而来的子对象。在Dog类的构造函数中,我们只需要对age和name进行初始化,而Animal类的构造函数则会在Dog类的构造函数中自动调用,完成子对象的初始化。
```c++
Dog myDog(2, "Buddy");
```
当我们创建一个Dog对象时,会先调用Animal类的构造函数进行子对象的初始化,然后再调用Dog类的构造函数进行一般数据成员的初始化。
阅读全文