子类必须在构造函数初始化列表中调用父类构造函数,因构造函数不能在函数体内直接调用;若父类无默认构造函数则必须显式调用,否则编译错误;多继承时按继承顺序调用各父类构造函数;虚继承中由最派生类直接调用虚基类构造函数。

在C++中,子类可以通过初始化列表来调用父类的构造函数。由于构造函数不能像普通成员函数那样被直接调用,因此必须在子类构造函数的初始化列表中显式指定对父类构造函数的调用。
使用初始化列表调用父类构造函数
子类构造函数通过初始化列表调用父类构造函数,语法如下:
class Base {public: Base(int value) { // 父类构造函数 }};class Derived : public Base {public: Derived(int value) : Base(value) { // 在这里调用父类构造函数 // 子类构造函数体 }};
说明:
Derived 构造函数使用 : Base(value) 调用 Base 的构造函数。 如果省略初始化列表中的父类构造函数,且父类没有默认构造函数(无参构造函数),则会编译错误。
调用父类的默认构造函数
如果父类有默认构造函数,可以在初始化列表中不写,系统会自动调用:
立即学习“C++免费学习笔记(深入)”;
class Base {public: Base() { } // 默认构造函数};class Derived : public Base {public: Derived() { // 自动调用 Base() // 不需要显式写 : Base() }};
多继承中调用多个父类构造函数
在多继承情况下,可以在初始化列表中依次调用各个父类的构造函数:
class A {public: A(int a) { }};class B {public: B(int b) { }};class C : public A, public B {public: C(int a, int b) : A(a), B(b) { }};
注意:调用顺序与继承声明顺序一致,而不是初始化列表中的顺序。
虚继承中的构造函数调用
在虚继承中,最派生类负责调用虚基类的构造函数:
class Base {public: Base(int value) { }};class Derived1 : virtual public Base {public: Derived1(int value) : Base(value) { }};class Derived2 : virtual public Base {public: Derived2(int value) : Base(value) { }};class Final : public Derived1, public Derived2 {public: Final() : Base(10), Derived1(10), Derived2(10) { }};
Final 类必须直接调用 Base 的构造函数,否则会出错。
基本上就这些。关键点是:C++ 中父类构造函数必须在子类构造函数的初始化列表中调用,不能在函数体内调用,且调用时机早于子类构造函数体执行。
以上就是c++++怎么调用父类的构造函数_c++父类构造函数调用方法的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1476761.html
微信扫一扫
支付宝扫一扫