1.子类的构造函数默认会调用父类的无参构造函数
#include <iostream>
using namespace std;
class Person
{
private:
int m_age;
public:
Person() : m_age(0)
{
cout << "Person::Person()" << endl;
}
Person(int age) : m_age(age)
{
cout << "Person::Person(int age)" << endl;
}
};
class Student : public Person
{
private:
int m_no;
public:
Student() : m_no(0)
{
cout << "Student::Student()" << endl;
}
};
int main()
{
Student student;
return 0;
}
输出结果如下:
汇编代码如下:
2.调用父类的构造函数
如果父类缺少无参构造函数,子类的构造函数必须显式调用父类的有参构造函数。因为子类的构造函数只会对自己定义的成员变量初始化,从父类继承过来的成员变量需要调用父类的构造函数进行初始化。
调用父类的构造函数只能通过初始化列表的方式进行。
如果没有指定要调用父类的哪个构造函数,那就调用父类的默认构造函数;如果指定了,那就调用指定的构造函数。
#include <iostream>
using namespace std;
class Person
{
private:
int m_age;
public:
Person(int age) : m_age(age)
{
}
};
class Student : public Person
{
private:
int m_no;
public:
Student(int age, int no) : m_no(no), Person(age)
{
}
};
int main()
{
Student student(18, 180);
return 0;
}
如果父类没有构造函数,就什么也不调用。
#include <iostream>
using namespace std;
class Person
{
private:
int m_age;
};
class Student : public Person
{
private:
int m_no;
public:
Student() : m_no(0)
{
cout << "Student::Student()" << endl;
}
};
int main()
{
Student student;
return 0;
}
汇编代码如下: