MST
星途 面试题库

面试题:C++ 中抽象类构造函数访问权限的基础理解

在 C++ 中,抽象类的构造函数通常设置为哪种访问权限比较合适?请说明原因。如果将抽象类构造函数设置为 private 会出现什么情况?
26.7万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 合适的访问权限
    • 通常设置为 protected
    • 原因:抽象类不能被实例化,但其派生类需要调用它的构造函数来初始化从抽象类继承的成员。设置为 protected 权限,允许派生类访问抽象类的构造函数,同时阻止外部代码直接实例化抽象类,符合抽象类的设计意图。例如:
class AbstractClass {
protected:
    AbstractClass() {}
};

class DerivedClass : public AbstractClass {
public:
    DerivedClass() : AbstractClass() {}
};
  1. 设置为 private 的情况
    • 如果将抽象类构造函数设置为 private,派生类将无法访问该构造函数,从而导致派生类无法正常构造。这是因为在派生类构造函数初始化列表中调用基类构造函数时,会出现访问权限错误。例如:
class AbstractClass {
private:
    AbstractClass() {}
};

class DerivedClass : public AbstractClass {
public:
    DerivedClass() : AbstractClass() {} // 这里会报错,无法访问 private 构造函数
};
  • 此外,外部代码也不能实例化抽象类,这与抽象类的性质相符,但派生类无法初始化从抽象类继承的成员,破坏了类的继承体系,使得整个设计变得不合理。