面试题答案
一键面试在B的构造函数中调用A的构造函数
在C++ 中,若A
是抽象类且其构造函数访问权限为protected
,在派生类B
的构造函数中可以通过初始化列表来调用A
的构造函数,示例代码如下:
#include <iostream>
class A {
protected:
A(int value) : data(value) {}
int data;
};
class B : public A {
public:
B(int value) : A(value) {}
void printData() {
std::cout << "Data in B: " << data << std::endl;
}
};
在上述代码中,B
类的构造函数通过初始化列表B(int value) : A(value)
调用了A
类的构造函数。
这种访问权限设置对整个继承体系的影响
- 限制外部实例化:
A
类构造函数为protected
,意味着不能在A
类及其派生类之外直接实例化A
类对象。这通常用于抽象类,因为抽象类本身不应该被实例化,它只是为派生类提供一个通用的基础。 - 派生类依赖:派生类(如
B
类)需要依赖A
类的构造函数来正确初始化从A
类继承的成员变量。如果A
类的构造函数发生变化,所有派生类的构造函数可能需要相应调整。 - 继承体系的封装性:这种设置增强了继承体系的封装性,外部代码无法直接访问
A
类的构造函数,只有派生类能够调用,有助于保持类层次结构的完整性和稳定性。同时,也限制了外部代码对A
类内部状态初始化的直接干预,使得继承体系的内部逻辑更加清晰和可控。