MST
星途 面试题库

面试题:C++中class与struct在继承时访问控制的变化

当使用class和struct进行继承时,默认的继承访问控制权限有何不同?假设有一个基类Base,包含公有(public)、私有(private)和保护(protected)成员,分别用class和struct从Base派生一个新类Derived,分析Derived类对Base类各成员的访问情况,并阐述原因。
25.5万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 默认继承访问控制权限
    • 当使用class关键字进行继承时,默认的继承访问控制权限是private
    • 当使用struct关键字进行继承时,默认的继承访问控制权限是public
  2. 分析Derived类对Base类各成员的访问情况
    • 使用class继承
      • 公有成员(public:在Derived类中变为私有成员。原因是class默认是私有继承,基类的公有成员在派生类中访问权限降低为私有,这意味着Derived类的成员函数可以访问这些成员,但外部代码无法通过Derived类的对象访问。
      • 私有成员(privateDerived类无法直接访问基类的私有成员。这是因为私有成员对于类的外部(包括派生类)是完全隐藏的,即使是通过继承也不能访问。
      • 保护成员(protected:在Derived类中变为私有成员。因为class默认私有继承,保护成员在派生类中的访问权限也降低为私有,Derived类的成员函数可以访问,但外部代码无法通过Derived类的对象访问,且Derived类的派生类也无法访问(因为已经是私有)。
    • 使用struct继承
      • 公有成员(public:在Derived类中仍然是公有成员。因为struct默认是公有继承,基类的公有成员在派生类中保持公有访问权限,这意味着Derived类的成员函数可以访问,外部代码也可以通过Derived类的对象访问。
      • 私有成员(private:同class继承情况,Derived类无法直接访问基类的私有成员。私有成员的访问限制不受继承方式影响,始终对外部(包括派生类)隐藏。
      • 保护成员(protected:在Derived类中仍然是保护成员。因为struct默认公有继承,保护成员在派生类中保持保护访问权限,Derived类的成员函数可以访问,外部代码无法通过Derived类的对象访问,但Derived类的派生类可以访问。