📅  最后修改于: 2023-12-03 15:13:58.132000             🧑  作者: Mango
C++中的构造函数是一种特殊的成员函数,其主要作用是在对象被创建时初始化对象的数据成员。问题15涉及到在派生类中调用基类构造函数,本文将为大家介绍C++中基类构造函数的调用方式。
在C++中,派生类的构造函数中必须调用其直接基类的构造函数,以确保从基类继承下来的数据成员被正确初始化。例如,我们定义了一个基类Animal
和其派生类Dog
,我们需要在Dog
的构造函数中调用Animal
的构造函数来初始化从基类继承下来的数据成员。
class Animal {
public:
Animal(int age) : m_age(age) {}
protected:
int m_age;
};
class Dog : public Animal {
public:
Dog(int age, const std::string& name) : Animal(age), m_name(name) {}
private:
std::string m_name;
};
在上面的代码中,我们定义了一个基类Animal
和其派生类Dog
。Animal
有一个整型数据成员m_age
,Dog
有一个字符串数据成员m_name
。在Dog
的构造函数中,我们在初始化列表中显式调用了Animal
的构造函数来初始化m_age
,然后再初始化m_name
。
在上面的例子中,我们使用了以下方式调用基类构造函数:
Dog(int age, const std::string& name) : Animal(age), m_name(name) {}
其中,Animal(age)
是对基类构造函数的调用。在派生类的构造函数中,我们可以通过以下两种方式调用基类构造函数:
BaseClass::BaseClass()
语法来调用基类构造函数。class Dog : public Animal {
public:
Dog(int age, const std::string& name) : Animal(age), m_name(name) {} // 调用方式1
Dog(int age, const std::string& name) {
Animal::Animal(age); // 调用方式2
m_name = name;
}
private:
std::string m_name;
};
在上述两种调用方式中,第一种更为常用。
在使用基类构造函数时,以下原则需注意:
在派生类的构造函数中,我们必须通过显式调用基类的构造函数来初始化从基类继承下来的数据成员。在使用基类构造函数时,我们应遵循确定基类构造函数调用方式的原则。