MST

星途 面试题库

面试题:C++私有继承中基类成员的访问权限变化

在C++私有继承中,基类的公有成员和保护成员在派生类中的访问权限分别会变成什么?请举例说明如何在派生类中访问这些变化后的成员。
46.9万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 访问权限变化
    • 在C++私有继承中,基类的公有成员在派生类中变为私有成员。
    • 基类的保护成员在派生类中也变为私有成员。
  2. 举例说明
#include <iostream>
// 基类
class Base {
public:
    int public_member;
protected:
    int protected_member;
private:
    int private_member;
};
// 派生类,私有继承
class Derived : private Base {
public:
    void accessMembers() {
        // 访问变化后的成员
        public_member = 10; // 原本基类的公有成员,现在在派生类中是私有成员,可以在派生类内部访问
        protected_member = 20; // 原本基类的保护成员,现在在派生类中是私有成员,可以在派生类内部访问
        // private_member = 30; // 错误,无法访问基类的私有成员,即使在派生类中
    }
};
int main() {
    Derived d;
    // d.public_member = 5; // 错误,在外部无法访问,因为它在派生类中变为私有成员
    // d.protected_member = 5; // 错误,在外部无法访问,因为它在派生类中变为私有成员
    d.accessMembers();
    return 0;
}

在上述代码中,Derived类私有继承自Base类。在Derived类的成员函数accessMembers中,可以访问变化后的public_memberprotected_member,但在main函数中,无法直接访问public_memberprotected_member,因为它们在Derived类中变为了私有成员。