来自 C++ 入门第 5 版:
看看这些类:

class Base {
    friend class Pal;
public:
    void pub_mem();
protected:
    int prot_mem;
private:
    int priv_mem;
};

class Sneaky : public Base {
private:
    int j;
};

class Pal {
public:
    int f1(Base b){
        return b.prot_mem;  //OK, Pal is friend class
    }

    int f2(Sneaky s){
        return s.j;  //error: Pal not friend, j is private
    }

    int f3(Sneaky s){
        return s.prot_mem; //ok Pal is friend
    }
}

这里 Pal 是 Base 的友元类,而 Sneaky 继承自 Base,在 Pal 中使用。
现在调用 s.prot_mem 的最后一行,作者给出了它起作用的原因,因为 Pal 是 Base 的友元类。但是到目前为止我读到的,我的理解告诉我它应该无论如何都应该工作,因为 s 派生自 Base 并且 prot_mem 是 Base Class 的 protected 成员,它应该已经可以访问 Sneaky,你能解释一下为什么我错了或更多详细说明请?

最佳答案



不, protected 变量 prot_mem 只能被派生类成员访问,而不能被第三方类成员访问,如 class Pal ,如果 Pal 不是 Base 的 friend 。

关于c++ - 了解 C++ 中继承/友元类的成员访问,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18699892/

10-11 04:16