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

在C++中,子类可以通过初始化列表来调用父类的构造函数。由于构造函数不能像普通成员函数那样被直接调用,因此必须在子类构造函数的初始化列表中显式指定对父类构造函数的调用。
子类构造函数通过初始化列表调用父类构造函数,语法如下:
class Base {
public:
Base(int value) {
// 父类构造函数
}
};
class Derived : public Base {
public:
Derived(int value) : Base(value) { // 在这里调用父类构造函数
// 子类构造函数体
}
};
说明:
如果父类有默认构造函数,可以在初始化列表中不写,系统会自动调用:
立即学习“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++父类构造函数调用方法的详细内容,更多请关注php中文网其它相关文章!
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号