面试题答案
一键面试- 调用顺序:
- 虚基类的构造函数(从最顶层的虚基类开始,按照继承顺序依次调用)。
- 非虚基类的构造函数(按照继承顺序依次调用)。
- 自身类的构造函数。
- 举例说明:
#include <iostream>
class A {
public:
A() {
std::cout << "A's constructor" << std::endl;
}
};
class B : virtual public A {
public:
B() {
std::cout << "B's constructor" << std::endl;
}
};
class C : virtual public A {
public:
C() {
std::cout << "C's constructor" << std::endl;
}
};
class D : public B, public C {
public:
D() {
std::cout << "D's constructor" << std::endl;
}
};
int main() {
D d;
return 0;
}
在上述代码中,D
类继承自 B
和 C
,而 B
和 C
都虚继承自 A
。当创建 D
类对象 d
时,输出结果为:
A's constructor
B's constructor
C's constructor
D's constructor
首先调用虚基类 A
的构造函数,然后按照继承顺序调用非虚基类 B
和 C
的构造函数,最后调用自身类 D
的构造函数。