MST

星途 面试题库

面试题:C++ 抽象类构造函数访问权限与继承关系

假设存在一个抽象类 A,有一个派生类 B 继承自 A。如果 A 的构造函数访问权限为 protected,在 B 的构造函数中如何正确调用 A 的构造函数?这种访问权限设置对整个继承体系有什么影响?
22.0万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

在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类的构造函数。

这种访问权限设置对整个继承体系的影响

  1. 限制外部实例化A类构造函数为protected,意味着不能在A类及其派生类之外直接实例化A类对象。这通常用于抽象类,因为抽象类本身不应该被实例化,它只是为派生类提供一个通用的基础。
  2. 派生类依赖:派生类(如B类)需要依赖A类的构造函数来正确初始化从A类继承的成员变量。如果A类的构造函数发生变化,所有派生类的构造函数可能需要相应调整。
  3. 继承体系的封装性:这种设置增强了继承体系的封装性,外部代码无法直接访问A类的构造函数,只有派生类能够调用,有助于保持类层次结构的完整性和稳定性。同时,也限制了外部代码对A类内部状态初始化的直接干预,使得继承体系的内部逻辑更加清晰和可控。