1、构造函数是否可以被继承
子类可以继承父类的所有成员变量和成员函数,但不能继承父类的构造函数,因此,在创建子类对象时,为了初始化从父类继承来的数据成员,系统需要调用其父类的额构造函数。
2、父类构造函数的调用规则
①如果子类没有定义构造函数,则调用分类的无参构造函数。
②如果子类定义了构造函数,不论是无参数还是带参数,在创建子类对象的时候,首先执行父类的无参数构造函数,然后执行自己的构造函数。
③在创建子类对象的时候,如果子类的构造函数没有显示调用父类的构造函数,则会调用父类的默认无参构造你函数。
④在创建子类的对象时,如果子类的构造函数没有显示调用父类的构造函数且父类自己提供了无参的构造函数,则会调用父类自己的无参构造函数。
⑤在创建子类对象的时候,如果子类的构造函数没有显示调用父类的构造函数且父类指定要了自己的有参构造函数,则出现报错(如果父类只有有参的构造函数,则子类必须显示调用此带参的构造函数】
⑥如果子类调用父类带参数的构造函数,需要用初始化父类成员对象的方式。
总结为:
如果子类没有显示的调用父类的构造函数,那么默认会调用父类的无参构造函数。
如果父类只提供了有参数的构造函数,那么子类在默认情况下调用父类的无参构造函数时就会报错。
析构函数的继承
跟父类的构造函数一样,子类也不能继承父类的析构函数,也需要通过派生子类的析构函数去调用父类的析构函数。在执行子类的析构函数时,系统会自动调用父类的析构函数和子对象的析构函数。对父类和子对象进行清理。
调用的顺序:与构造函数的调用顺序相反,先执行子类自己的析构函数,对派生类新增加的成员进行清理,之后调用子对象的析构函数,对子对象进行清理,最后调用父类的析构函数,对基类进行清理。