MST

星途 面试题库

面试题:C++ 虚基类继承中访问权限的规则应用

在 C++ 虚基类继承体系中,假设有类 A 为虚基类,类 B 和类 C 都以虚继承的方式从 A 派生,然后类 D 多重继承自 B 和 C。A 中有一个 protected 成员变量 m_value。请说明在类 D 的成员函数中能否直接访问 m_value ,并阐述原因。如果不能,怎样做才能访问到该变量?
15.9万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 能否直接访问及原因
    • 在类 D 的成员函数中可以直接访问 m_value 。
    • 原因是虚基类保证了在最终的派生类(这里是 D)中只存在一份虚基类(A)的子对象。当 B 和 C 以虚继承的方式从 A 派生,然后 D 多重继承自 B 和 C 时,A 的成员变量(包括 protected 的 m_value)对于 D 而言就如同直接从 A 派生一样,只要是通过虚继承的路径,在 D 的成员函数中就可以访问其 protected 成员。
  2. 若假设不能访问的访问方法(实际可以访问,但假设不可以的处理思路)
    • 可以通过在类 A 中提供 public 或 protected 的访问函数(如 getValue 函数)来间接访问 m_value 。
    class A {
    protected:
        int m_value;
    public:
        int getValue() const {
            return m_value;
        }
    };
    class B : virtual public A {};
    class C : virtual public A {};
    class D : public B, public C {
    public:
        void func() {
            int value = getValue();//通过 A 提供的访问函数访问 m_value
        }
    };